2017-12-11 2 views
0

私はストリームを使い慣れていて、どのように動作するのですか?リストに追加された特定のオブジェクトの出現を取得しようとしています。リストのあるJavaストリーム

Collectionsを使用してこれを行う方法が見つかりました。次のようになります。

for (int i = 0; i < countries.size(); i++) { 
    int occurrences = Collections.frequency(countries, countries.get(i)); 
} 

ストリームを使用します。 私がいたストリームに対して使用方法:

countries.parallelStream().filter(p -> p.contentEquals(countries.get(countries.size()-1))).count() 

これが唯一の代わりに私がすべてオブジェクトとその出現を望んで、現在のオブジェクトとその出現を返します。

編集:

`private final ArrayList<String> countries = new ArrayList<>(); 

dataset.setValue(countries.parallelStream() 
              .filter(p -> p.contentEquals(countries.get(countries.size()-1))) 
              .count(), 
               "", 
              countries.get(countries.size()-1)); //sets the graph for the given country 
@Override 
    public void addCountries(String country) { 
     countries.add(country); 
    } 

    @Override 
    public void removeCountries(int country) { 
     countries.remove(country); 
    }` 

私は、グラフを作っています。 dataset.setValue()の最初の文は、国の出現量です。これは各国ごとに行われなければなりませんので、国の出現数を確認することができます。 解決:これは

the graph

編集2が役に立てば幸い!

countries.stream().distinct().forEach(o -> 
       dataset.setValue(Collections.frequency(countries, o), 
               "", 
               o)); //sets the graph for the given country 
+1

ストリームを生成しますか? – prsvr

答えて

0

あなたはこれを行うことができます。

List<Integer> lista = new ArrayList<>(Arrays.asList(1,2,3,3,2,1,5,4,1,2,3)); 
lista.stream().distinct().forEach(o -> System.out.println(o + " occures " + Collections.frequency(lista, o) + " times in a list !")); 

出力:

1 occures 3回をリストに!

2回3回リストに!

3回が3回リストに!

5回1回リストに!

4回の出現がリストに1回あります!今私達はあなたのリストのうちの流れを作る

、我々は(.distinctを使用してストリームから重複を削除)、そして我々は我々がCollections.frequencyを使用し、リストからユニークな要素が残されています。要するに

各要素がリスト内で何回出現するかを出力します。

+0

には、System.out.printの代わりに、この出力を指定された整数に保存する方法がありますか? –

+0

あなたは以下のようにRomanのようなマップに結果を保存することができます。あなたが望むなら、あなたの質問を編集し、あなたが念頭に置いているものを正確に掲示することができます、そして、私はそれを見ていきます。 – prsvr

3

また、コレクタをグループ化する使用できます。

Collection<Integer> collection = Arrays.asList(1, 2, 1, 4, 2); 
final Map<Integer, Long> map = collection.stream().collect(
     Collectors.groupingBy(el -> el, Collectors.counting())); 
System.out.println(map); 

これは彼らの出現数と一緒にすべてのオブジェクトを返しますコレクションの

{1=2, 2=2, 4=1} 
+1

私は、この解決策が、この解決策よりも時間複雑度が高い単純化されたforループである、受け入れられた回答よりも好ましいことを発見しました。コレクターを使用することで、中間値の保守に頼ることなく、すぐにすべてのカウントを保持します。 –

関連する問題