Java 排序字符串 2 列出并比较它们



我想对 2 列表进行排序并进行比较,但排序方法不起作用。 我有 2 个包含整数的字符串列表。

这些是我的列表

List<String> WORD_OF_ADDRESS = gatekeeperPage.getWords(ADDRESS);
List<String> WORD_OF_CONTACT_ADDRESS = gatekeeperPage.getWords(CONTACT_ADDRESS);

我的getwords方法返回:return Arrays.asList(words);

当我尝试这个时;

Stream<Object> sortedList = Arrays.stream(WORD_OF_ADDRESS.toArray()).sorted();
System.out.println("SORTED LİST "+ sortedList);

我得到这个:SORTED LİST java.util.stream.SortedOps$OfRef@3e8c3cb

我应该怎么做才能对 2 个列表进行排序?

您实际显示的是一个流。但是你想要的是这个流使用的字符串列表,这样改变你的代码:

List<String> sortedList = WORD_OF_ADDRESS.stream()
.sorted()
.collect(Collectors.toList());

然后以约翰尼·莫普(Johnny Mopp)的方式显示您的列表

您可以按如下方式轻松地对列表进行排序:

List<String> WORD_OF_ADDRESS_sorted gatekeeperPage.getWords(ADDRESS)
.stream().sorted().toList();
List<String> WORD_OF_CONTACT_ADDRESS_sorted = gatekeeperPage.getWords(CONTACT_ADDRESS)
.stream().sorted().toList();

然后你可以比较它们。

但是,如果您只想根据内容查看它们是否相等,则无需排序即可测试内容相等性。 每次项目发生时,使用运行计数更新地图的效率更高。Add 1一个列表,subtract 1另一个列表。Map.merge很有用,因为它允许将0值替换为null然后删除该条目。 因此,如果您最终得到一个空地图,则列表必须根据内容相等。

public static <T> boolean areEqual(List<T> list1, List<T> list2) {
Map<T, Integer> map = new HashMap<>();
if (list1.size() != list2.size()) {
return false;
}

for (int i = 0; i < list1.size(); i++) {
map.merge(list1.get(i), -1,
(k, v) -> v + 1 == 0 ? null : v + 1);
map.merge(list2.get(i), 1,
(k, v) -> v - 1 == 0 ? null : v - 1);
}

return map.isEmpty();
}

我还没有对此进行广泛测试,但使用随机整数列表进行所有测试,其中只有一个被复制洗牌测试为相等。 随机加盐具有不同值的列表,测试为 false。

由于不可变列表不会更改,因此可以直接将它们传递给方法。

警告:由于整数具有最大值和最小值,因此如果达到这些限制,非常大的列表可能会失败。 对LongBigInteger进行计数可以缓解此问题,但也会降低其性能。

最新更新