何が問題ですか?出力に値がない。重複した値を出力するはずです。Javaでリストに重複する用語を取得しています
HashSet<Integer> hs=new HashSet();
hs.addAll(a);
List<Integer> b=new ArrayList();
a.removeAll(hs);
System.out.println(a);
何が問題ですか?出力に値がない。重複した値を出力するはずです。Javaでリストに重複する用語を取得しています
HashSet<Integer> hs=new HashSet();
hs.addAll(a);
List<Integer> b=new ArrayList();
a.removeAll(hs);
System.out.println(a);
私はあなたがa.removeAll(hs);
は高々一度すべての要素を削除することを考えて疑い(a
はArraylist
です)。そうではありません。 the docs状態として:
[...]この呼び出しが戻った後、このコレクションでも
hs.addAll(a);
かかわらを含むセットをもたらすことを意味し、指定されたコレクション
と共通の要素が含まれていません潜在的により小さい値a
(重複がありません)を呼び出すと、a.removeAll(hs)
を呼び出しても、元の値と重複がすべて削除されます。
removeAll
のソースコードは、それが天気をかa
をチェックにわたって繰り返し処理としてa
の要素がhs
であり、その場合はa
から削除することを検証します。 hs
を反復処理せず、a
の一致する要素を削除します。あなたが使用することができますどのようなSource grepcode
removeIf
です:
List<Integer> a = new ArrayList<>(Arrays.asList(1,1,1,1,1,1,2,2,3,3,4,5,6,6,7));
Map<Integer, List<Integer>> counter = a.stream().collect(Collectors.groupingBy(i -> i));
a.removeIf(v -> counter.get(v).size() == 1);
System.out.println(new HashSet<Integer>(a)); //[1, 2, 3, 6]
この中でやってB' '変数とは何ですか?それは意味がないようです。 –
あなたは文字通りaからすべての要素を削除しました。もちろん、aは空です。 – Assafs
*しかし、重複した値を印刷する必要があります。* - それはなぜですか?以前に重複していた値が印刷されるはずですか? – luk2302