web-dev-qa-db-ja.com

リストで一意の値を取得する方法

データを含む2つのテキストファイルがあります。これらのファイルをBufferReaderで読み取り、ファイルごとに1列のデータをList<String>

それぞれにデータを複製しましたが、2番目のListの複製されたデータに対抗するには、最初のListに一意のデータが必要です。

Listから一意の値を取得するにはどうすればよいですか?

14
Junior Fulcrum

中間Setを使用すると、1行で実行できます。

_List<String> list = new ArrayList<>(new HashSet<>(list));
_

Java 8では、ストリームでdistinct()を使用します:

_List<String> list = list.stream().distinct().collect(Collectors.toList());
_

または、リストをまったく使用しないでください。一意の値のみを保持したいコレクションには、最初からSet(HashSetなど)を使用するだけです。

21
Bohemian

ArrayListHashSet に変換します。

List<String> listWithDuplicates; // Your list containing duplicates
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates);

なんらかの理由で、後でセットをリストに戻す場合は可能ですが、ほとんどの場合必要はありません。

List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues);
10

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メソッドを適合させる必要があります。

2
Jorciney

解決策が他の人の役に立つかもしれないことに気づきました。最初に、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。

0
Junior Fulcrum