データを含む2つのテキストファイルがあります。これらのファイルをBufferReader
で読み取り、ファイルごとに1列のデータをList<String>
。
それぞれにデータを複製しましたが、2番目のList
の複製されたデータに対抗するには、最初のList
に一意のデータが必要です。
List
から一意の値を取得するにはどうすればよいですか?
中間Set
を使用すると、1行で実行できます。
_List<String> list = new ArrayList<>(new HashSet<>(list));
_
Java 8では、ストリームでdistinct()
を使用します:
_List<String> list = list.stream().distinct().collect(Collectors.toList());
_
または、リストをまったく使用しないでください。一意の値のみを保持したいコレクションには、最初からSet(HashSetなど)を使用するだけです。
ArrayList
を HashSet
に変換します。
List<String> listWithDuplicates; // Your list containing duplicates
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates);
なんらかの理由で、後でセットをリストに戻す場合は可能ですが、ほとんどの場合必要はありません。
List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues);
In Java 8:
// List with duplicates
List<String> listAll = Arrays.asList("A", "A", "B", "C", "D", "D");
// filter the distinct
List<String> distinctList = listAll.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(distinctList);// prints out: [A, B, C, D]
これはオブジェクトでも機能しますが、おそらくequalsメソッドを適合させる必要があります。
解決策が他の人の役に立つかもしれないことに気づきました。最初に、BufferReaderから重複した値が入力されます。
ArrayList<String> first = new ArrayList<String>();
一意の値を抽出するには、downのような新しいArrayListを作成します。
ArrayList<String> otherList = new ArrayList<>();
for(String s : first) {
if(!otherList.contains(s))
otherList.add(s);
}
インターネットでの投稿の多くは、私のArraylistをList、Set、HashTableまたはTreeSetに割り当てるためにすべて話している。誰もが理論の違いを説明できますか、どれが実際にあなたが使用するのに最適ですか?あなたの時間の人のためのthnks。