【问题标题】:how to compare two sets in java and print missing elements [duplicate]如何在java中比较两组并打印缺失的元素[重复]
【发布时间】:2020-09-18 19:29:06
【问题描述】:

如何比较两个 Treeset 并在 java 中打印相同/不同的元素。

Set<Integer> aTreeSet = new TreeSet<>();
aTreeSet.add(3);
aTreeSet.add(1);
aTreeSet.add(2);

Set<Integer> bTreeSet = new TreeSet<>();
bTreeSet.add(3);
bTreeSet.add(5);
bTreeSet.add(4);

我想输出为 A 中缺少的元素:[1,2] B 中缺少元素:[5,4]

我尝试了以下方法,但没有按预期工作。

aTreeSet.removeAll(bTreeSet);
System.out.println(aTreeSet);//[1,2]
System.out.println(bTreeSet);//[3,4,5]

请帮帮我。

【问题讨论】:

  • 这能回答你的问题吗? Getting the difference between two sets
  • 您走在正确的轨道上,并且已经找到了一半的答案。 aTreeSet.removeAll(bTreeSet) 修改 aTreeSet(如链接 Q/A 中所述)。你需要运行bTreeSet.removeAll(original_aTreeSet) 来获得你想要的。

标签: java collections compare


【解决方案1】:

您好,您可以这样做:

Set<Integer> aTreeSet = new TreeSet<>();
aTreeSet.add(3);
aTreeSet.add(1);
aTreeSet.add(2);

Set<Integer> bTreeSet = new TreeSet<>();
bTreeSet.add(3);
bTreeSet.add(5);
bTreeSet.add(4);

final Set<Integer> aTreeSetWithoutBTreeSet = aTreeSet.stream()
    .filter(tree -> !bTreeSet.contains(tree))
    .collect(Collectors.toSet());

final Set<Integer> bTreeSetWithoutATreeSet = bTreeSet.stream()
    .filter(tree -> !aTreeSet.contains(tree))
    .collect(Collectors.toSet());

System.out.println(aTreeSetWithoutBTreeSet);//[1,2]
System.out.println(bTreeSetWithoutATreeSet);//[3,4,5]

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多