タグ付けされた質問 「java-stream」

Stream APIの使用に関連する質問には、このタグを使用します。これはJava 8で導入され、コレクションのfilter-map-reduceパイプラインなど、値のストリームに対する関数形式の操作をサポートしています。

15
バッチ処理付きのJava 8ストリーム
アイテムのリストを含む大きなファイルがあります。 アイテムのバッチを作成し、このバッチでHTTPリクエストを作成します(すべてのアイテムがHTTPリクエストのパラメーターとして必要です)。私はforループを使用して非常に簡単にそれを行うことができますが、Java 8の愛好家として、Java 8のStreamフレームワークでこれを書いてみてください(そして、遅延処理の利点を享受します)。 例: List<String> batch = new ArrayList<>(BATCH_SIZE); for (int i = 0; i < data.size(); i++) { batch.add(data.get(i)); if (batch.size() == BATCH_SIZE) process(batch); } if (batch.size() > 0) process(batch); 長いことやりたい lazyFileStream.group(500).map(processBatch).collect(toList()) これを行う最善の方法は何でしょうか?

6
Java 8ストリームが空かどうかを確認する方法は?
Stream非ターミナル操作として、a が空かどうかを確認し、空でない場合は例外をスローするにはどうすればよいですか? 基本的に、私は以下のコードと同等のものを探していますが、その間にストリームを具体化していません。特に、ストリームが端末操作によって実際に消費される前にチェックが行われるべきではありません。 public Stream<Thing> getFilteredThings() { Stream<Thing> stream = getThings().stream() .filter(Thing::isFoo) .filter(Thing::isBar); return nonEmptyStream(stream, () -> { throw new RuntimeException("No foo bar things available") }); } private static <T> Stream<T> nonEmptyStream(Stream<T> stream, Supplier<T> defaultValue) { List<T> list = stream.collect(Collectors.toList()); if (list.isEmpty()) list.add(defaultValue.get()); return list.stream(); }

6
Javaでstream.sorted()を使用してリストをソートする
ストリームからリストをソートすることに興味があります。これは私が使用しているコードです: list.stream() .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue())) .collect(Collectors.toList()); 何か不足していますか?リストはソートされていません。 値が最も低い項目に従ってリストをソートする必要があります。 for (int i = 0; i < list.size(); i++) { System.out.println("list " + (i+1)); print(list, i); } そして、印刷方法: public static void print(List<List> list, int i) { System.out.println(list.get(i).getItem().getValue()); }


5
配列からストリーミングするときに整数を文字列にマッピングできないのはなぜですか?
このコードは動作します(Javadocで取得): List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", ")); これはコンパイルできません: int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -> i.toString()) .collect(Collectors.joining(", ")); IDEAは、「ラムダ式の互換性のない戻り値の型文字列」があることを教えてくれます。 どうして ?そしてそれを修正するには?

7
Java 8でのfindAny()とfindFirst()の違い
Наэтотвопросестьответынаスタックオーバーフローнарусском:КакиеразличиямеждуのFindFirstиfindAnyвJavaの8? Java8のAPIStream#findAny()とStream#findFirst()の間で少し混乱してい Streamます。 私が理解したのは、たとえば、フィルターと組み合わせて使用​​した場合、両方がストリームから最初に一致した要素を返すということです。 では、なぜ同じタスクに2つの方法があるのでしょうか。私は何かが足りないのですか?

6
Android API <24でJava8 Stream APIを使用することは可能ですか?
私はここでこの投稿を読みました。しかし、それでもminSdkVersion &lt;24で次のようなJava8 StreamAPI機能を含むコードを実行することはできません。 List&lt;Car&gt; newCars = cars.stream() .filter(s -&gt; s.getColor().equals("red")) .collect(Collectors.toList()); エラーメッセージが原因で実行されません 呼び出しにはAPIレベル24が必要です(現在の最小値は15):java.util.Collection#stream それで、誰かが解決策を知っていますか?

5
最初に見つかった要素がnullの場合、findFirst()がNullPointerExceptionをスローするのはなぜですか?
なぜこれがスローするのjava.lang.NullPointerExceptionですか? List&lt;String&gt; strings = new ArrayList&lt;&gt;(); strings.add(null); strings.add("test"); String firstString = strings.stream() .findFirst() // Exception thrown here .orElse("StringWhenListIsEmpty"); //.orElse(null); // Changing the `orElse()` to avoid ambiguity の最初の項目stringsはnull、です。これは完全に許容できる値です。さらに、オプションをfindFirst()返します。これは、sを処理できるようにするためにさらに意味があります。findFirst()null 編集:orElse()あいまいさが少なくなるようにを更新しました。

5
null値のjdk8ストリームをどのように管理する必要がありますか
こんにちは仲間のJava開発者、 in advanceJDK8がまだリリースされていないので(そして今のところまだリリースされていないので)、主題が少しかもしれないことは知っていますが、Lambda式、特にStreamとして知られる新しいコレクションAPIに関連する部分に関する記事を読んでいました。 これは、Java Magazineの記事に記載されている例です(これはカワウソの個体数アルゴリズムです。): Set&lt;Otter&gt; otters = getOtters(); System.out.println(otters.stream() .filter(o -&gt; !o.isWild()) .map(o -&gt; o.getKeeper()) .filter(k -&gt; k.isFemale()) .into(new ArrayList&lt;&gt;()) .size()); 私の質問は、Set内部反復の途中で、カワウソの1つがnullの場合はどうなるかということです。 NullPointerExceptionがスローされることを期待しますが、以前の開発パラダイム(機能しない)にとどまっている可能性があります。誰かがこれをどのように処理するかについて教えてもらえますか? これが本当にNullPointerExceptionをスローする場合、この機能は非常に危険であり、以下のようにのみ使用する必要があります。 null値がないことを確認する開発者(おそらく以前の.filter(o-&gt; o!= null)を使用) 開発者は、アプリケーションがnullカワウソまたは処理する特別なNullOtterオブジェクトを生成しないようにします。 最良のオプション、または他のオプションは何ですか? ありがとう!


14
Java 8、重複する要素を見つけるためのストリーム
整数リスト内の重複する要素をリストアップしようとしています。 List&lt;Integer&gt; numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4}); jdk8のStreamsを使用します。誰かが試しましたか。重複を削除するには、distinct()APIを使用できます。しかし、重複した要素を見つけるのはどうですか?誰かが私を助けることができますか?

3
静的初期化子でラムダを使用した並列ストリームがデッドロックを引き起こすのはなぜですか?
静的初期化子でラムダを使用して並列ストリームを使用すると、CPU使用率がなく、一見永遠にかかるという奇妙な状況に遭遇しました。コードは次のとおりです。 class Deadlock { static { IntStream.range(0, 10000).parallel().map(i -&gt; i).count(); System.out.println("done"); } public static void main(final String[] args) {} } これは、この動作の最小限の再現テストケースのようです。もし私が: 静的初期化子の代わりにmainメソッドにブロックを配置します。 並列化を削除する、または ラムダを削除し、 コードは即座に完了します。誰かがこの振る舞いを説明できますか?それはバグですか、それともこれは意図されたものですか? OpenJDKバージョン1.8.0_66-internalを使用しています。

3
Java8ストリームでのforEachとforEachOrdered
これらのメソッドは実行順序が異なることを理解していますが、すべてのテストで異なる順序の実行を実現することはできません。 例: System.out.println("forEach Demo"); Stream.of("AAA","BBB","CCC").forEach(s-&gt;System.out.println("Output:"+s)); System.out.println("forEachOrdered Demo"); Stream.of("AAA","BBB","CCC").forEachOrdered(s-&gt;System.out.println("Output:"+s)); 出力: forEach Demo Output:AAA Output:BBB Output:CCC forEachOrdered Demo Output:AAA Output:BBB Output:CCC 2つの方法で異なる出力が生成される場合の例を提供してください。

7
Java 8 StreamsFlatMapメソッドの例
私は次のJava update、すなわちをチェックしています:Java 8 or JDK 8。はい、私は焦ります。新しいものがたくさんありますが、理解できないことがあります。いくつかの簡単なコードです。 final Stream&lt;Integer&gt;stream = Stream.of(1,2,3,4,5,6,7,8,9,10); stream.flatMap(); javadocsは public &lt;R&gt; Stream&lt;R&gt; flatMap(Function&lt;? super T,? extends Stream&lt;? extends R&gt;&gt; mapper) このストリームの各要素を、提供されたマッピング関数を各要素に適用することによって生成されたマップされたストリームのコンテンツで置き換えた結果で構成されるストリームを返します。マップされた各ストリームは、そのコンテンツがこのストリームに配置された後に閉じられます。(マップされたストリームがnullの場合、代わりに空のストリームが使用されます。)これは中間操作です。 誰かがflatMap、以前のJavaバージョンでそれJava[6,7]をコーディングする方法、およびを使用して同じルーチンをコーディングする方法について、いくつかの簡単な実際の例を作成していただければ幸いですJava 8。

5
Stream.allMatch()が空のストリームに対してtrueを返すのはなぜですか?
同僚と私には、空のストリーム呼び出しallMatch()が返されるという想定に起因するバグがありましたfalse。 if (myItems.allMatch(i -&gt; i.isValid()) { //do something } もちろん、ドキュメントを想定して読んでいないのは私たちのせいです。しかし、私が理解していないのはallMatch()、空のストリームのデフォルトの動作がなぜ戻るのかということですtrue。これの理由は何でしたか?同様にanyMatch()(逆に偽を返す)、この操作はモナドを出発不可欠な方法で使用され、おそらくで使用if声明。これらの事実を考慮すると、ほとんどの用途でallMatch()デフォルトでtrue空のストリームを使用することが望ましい理由はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.