2017-03-17 7 views
0

Java 8ストリームを使用してデータを取得しようとしているマップと、述語を使用してフィルタをダウンしました。Java 8ストリームと述語を使用するこのコードの時間複雑度

しかし、私はコードの複雑さに大きな疑問を抱いています。誰も私がこのコードの時間の複雑さを理解するのを助けることができますか?

class Student{ 
    String id; 
} 
Multimap<Integer, String> map = HashMultimap.create(); 
    map.put(1, new Student("id1")); 
    map.put(2, new Student("id1")); 
    map.put(1, new Student("id2")); 
    map.put(1, new Student("id3")); 

// Time complexity of this ??? 
map.get(1).stream().filter(p -> p.getId().equals("id1")) 
        .collect(Collectors.toSet()); 
+0

複雑さはどうなると思いますか? –

+1

私の推測はO(n) – user1142317

+1

です。私が見る限り、変数入力がないので、そのコードは 'O(1)'です。 –

答えて

1

あなたが端末操作を指定していないと流れが評価怠惰なので、あなたのストリームコードのための簡単な答えは、O(1)です。したがって、ストリームコードはストリーム処理をまったく行いません。

map.get(1)操作は、すでに計算されたセットを返します。だから複雑さはそのエントリを見つけるためのものです:O(1)、すでにコメント者の一人のようです。

編集後はO(n)にする必要があります。

しかし、Brianは正しいコードと複雑さについては考えていないと言っています。

+0

しかし、その検索されたストリームでは、「フィルタ」を行っています。悪いケースでは、すべてのエントリを通過できますが、O(n)操作になることはありません。 – user1142317

+4

あなたは、collectやsoのような端末操作をしないといけません。 「完全な」ストリーム文を提供する必要があります。 – wumpz

+0

質問を編集しました。端末操作を追加しました。 – user1142317

関連する問題