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

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

9
Java SE 8にはペアまたはタプルがありますか?
Java SE 8で遅延関数操作をいじってmapいます。iペア/タプルへのインデックスを作成し(i, value[i])、次にfilter2番目のvalue[i]要素に基づいて、最後にインデックスのみを出力します。 私はまだこれに苦しむ必要があります:JavaのC ++ Pair <L、R>に相当するものは何ですか?ラムダとストリームの大胆な新時代に? 更新:かなり単純化した例を紹介しました。これには、@ dkatzelが提供するきちんとしたソリューションが含まれています。ただし、一般化されません。したがって、より一般的な例を追加します。 package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, false, true, false, true}, {false, false, false, true, false, true}, {false, false, false, true, false, true}, …

9
Java8ラムダを使用してストリームを逆順にソートする方法は?
リストをソートするためにjava lambdaを使用しています。 逆に並べ替えるにはどうすればよいですか? この投稿を見ましたが、Java 8ラムダを使用したいと思います。 これがハックとしての私のコードです(私は* -1を使用しました)。 Arrays.asList(files).stream() .filter(file -> isNameLikeBaseLine(file, baseLineFile.getName())) .sorted(new Comparator<File>() { public int compare(File o1, File o2) { int answer; if (o1.lastModified() == o2.lastModified()) { answer = 0; } else if (o1.lastModified() > o2.lastModified()) { answer = 1; } else { answer = -1; } return …

4
標準のKotlinライブラリで利用できるJava 8 Stream.collectの同等のものは何ですか?
Java 8では、Stream.collectコレクションの集約を可能にするものがあります。Kotlinでは、おそらくstdlibの拡張関数のコレクションとして以外は、これは同じ方法で存在しません。しかし、さまざまなユースケースでの同等性が何であるかは明らかではありません。 たとえば、JavaDocCollectorsの上部には Java 8用に記述された例があり、それらをKolinに移植する場合、異なるJDKバージョンではJava 8クラスを使用できないため、異なる方法で記述する必要があります。 Kotlinコレクションの例を示すオンラインのリソースに関しては、それらは通常は取るに足らないものであり、実際に同じ使用例と比較することはできません。Java 8用に文書化されているようなケースに本当に一致する良い例は何Stream.collectですか?リストがあります: 名前をリストに蓄積する 名前をTreeSetに蓄積する 要素を文字列に変換し、コンマで区切って連結します 従業員の給与の合計を計算します 部門別のグループ従業員 部門ごとの給与の合計を計算する 生徒を合格と不合格に分ける 上記のリンクのJavaDocの詳細を使用。 注: この質問は、作者が意図的に作成して回答したものであり(自己回答式の質問)、一般的に尋ねられるKotlinトピックに対する慣用的な回答がSOにあります。また、現在のKotlinには正確ではない、Kotlinのアルファ用に書かれたいくつかの本当に古い回答を明確にするためにも。

5
ストリームを使用してBigDecimalを合計する
LinkedList一緒に追加したいBigDecimals(この例では)のコレクションがあります。これにストリームを使用することは可能ですか? Streamクラスにいくつかのメソッドがあることに気づきました Stream::mapToInt Stream::mapToDouble Stream::mapToLong それぞれに便利なsum()方法があります。しかし、私たちが知っているようにfloat、double算術はほとんど常に悪い考えです。 それでは、BigDecimalsを合計する便利な方法はありますか? これは私がこれまでに持っているコードです。 public static void main(String[] args) { LinkedList<BigDecimal> values = new LinkedList<>(); values.add(BigDecimal.valueOf(.1)); values.add(BigDecimal.valueOf(1.1)); values.add(BigDecimal.valueOf(2.1)); values.add(BigDecimal.valueOf(.1)); // Classical Java approach BigDecimal sum = BigDecimal.ZERO; for(BigDecimal value : values) { System.out.println(value); sum = sum.add(value); } System.out.println("Sum = " + sum); // Java 8 approach …

7
Java 8:ストリームで例外をスローするメソッドを使用するにはどうすればよいですか?
クラスとメソッドがあるとします class A { void foo() throws Exception() { ... } } ここで、次のようなAストリームによって配信されるインスタンスごとにfooを呼び出します。 void bar() throws Exception { Stream<A> as = ... as.forEach(a -> a.foo()); } 質問:例外を適切に処理するにはどうすればよいですか?foo()によってスローされる可能性のある例外を処理していないため、コードがマシンでコンパイルされません。のthrows Exceptionはbarここでは役に立たないようです。何故ですか?

8
2つのJava 8ストリーム、またはストリームへの追加要素の追加
次のように、ストリームまたは追加の要素を追加できます。 Stream stream = Stream.concat(stream1, Stream.concat(stream2, Stream.of(element)); そして、次のように、新しいものを追加することができます。 Stream stream = Stream.concat( Stream.concat( stream1.filter(x -> x!=0), stream2) .filter(x -> x!=1), Stream.of(element)) .filter(x -> x!=2); しかし、concat静的であるため、これは醜いです。場合はconcat、インスタンスメソッドあったが、上記の例では、より読みやすいでしょう。 Stream stream = stream1.concat(stream2).concat(element); そして Stream stream = stream1 .filter(x -> x!=0) .concat(stream2) .filter(x -> x!=1) .concat(element) .filter(x -> x!=2); 私の質問は: 1)concat静的である理由はありますか?それとも私が見逃している同等のインスタンスメソッドがありますか? 2)いずれにしても、これを行うより良い方法はありますか?

9
コレクションまたはストリームを返す必要がありますか?
メンバーリストに読み取り専用ビューを返すメソッドがあるとします。 class Team { private List < Player > players = new ArrayList < > (); // ... public List < Player > getPlayers() { return Collections.unmodifiableList(players); } } さらに、クライアントが行うことはすべて、リストを1回、即座に繰り返すことであると想定します。プレーヤーをJListか何かに入れるかもしれません。クライアントは後の検査のためにリストへの参照を保存しません! この一般的なシナリオでは、代わりにストリームを返す必要がありますか? public Stream < Player > getPlayers() { return players.stream(); } または、Javaで非慣用的なストリームを返していますか?ストリームは、それが作成された同じ式内で常に「終了」するように設計されていましたか?

4
Java 8でストリームをキャストすることは可能ですか?
Java 8でストリームをキャストすることは可能ですか?オブジェクトのリストがあるとしましょう。次のようにして、追加のオブジェクトをすべて除外できます。 Stream.of(objects).filter(c -> c instanceof Client) この後、クライアントと何かをしたい場合は、それぞれをキャストする必要があります。 Stream.of(objects).filter(c -> c instanceof Client) .map(c -> ((Client) c).getID()).forEach(System.out::println); これは少し醜く見えます。ストリーム全体を別のタイプにキャストすることは可能ですか?にキャストStream<Object>するようなStream<Client>? このようなことはおそらく悪いデザインを意味するという事実を無視してください。私はコンピューターサイエンスのクラスでこのようなことをしているので、Java 8の新機能を調べていて、それが可能かどうか知りたいと思っていました。
160 java  java-8  java-stream 


26
Java 8ストリームの逆順
一般的な質問:ストリームをリバースする適切な方法は何ですか?ストリームを構成する要素のタイプがわからない場合、ストリームを逆にする一般的な方法は何ですか? 具体的な質問: IntStream特定の範囲IntStream.range(-range, 0)で整数を生成するための範囲メソッドを提供します。これで、範囲を0から負に反転させたいので、機能しません。また、使用できません。Integer::compare List<Integer> list = Arrays.asList(1,2,3,4); list.stream().sorted(Integer::compare).forEach(System.out::println); IntStream私は、このコンパイラエラーを取得します エラー:(191、0)ajc:sorted()タイプのメソッドIntStreamは引数(Integer::compare)に適用できません ここで何が欠けていますか?

14
JDK8とラムダ(java.util.stream.Streams.zip)を使用したスト​​リームの圧縮
ラムダb93を使用するJDK 8では、ストリームを圧縮するために使用できるクラスjava.util.stream.Streams.zipがb93にありました(これは、チュートリアル「Java8ラムダを探索する」で説明されています。DhananjayNeneによるパート1)。この機能: 2つのストリームの要素を組み合わせた結果を要素とする、レイジーで順次結合されたStreamを作成します。 ただし、b98ではこれがなくなりました。実際には、Streamsクラスはb98のjava.util.streamでさえアクセスできません。 この機能は移動されましたか。移動されている場合、b98を使用してストリームを簡潔に圧縮するにはどうすればよいですか? 私が考えているアプリケーションは、このShenのJava実装にあります。 static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) (b98の機能を使用しない)かなり冗長なコードで機能します。

2
java8ストリームでの処理の順序を確実にする方法は?
XMLJavaオブジェクト内でリストを処理したい。受け取った順にすべての要素を処理する必要があります。 したがってsequential、stream私は使用するそれぞれを呼び出す必要がありますか? list.stream().sequential().filter().forEach() または、並列処理を使用しない限り、ストリームを使用するだけで十分ですか? list.stream().filter().forEach()
148 java  java-8  java-stream 

10
ストリームを2つのストリームに分割できますか?
Java 8ストリームで表されるデータセットがあります。 Stream<T> stream = ...; それをフィルタリングしてランダムなサブセットを取得する方法を見ることができます-たとえば Random r = new Random(); PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator(); Stream<T> heads = stream.filter((x) -> (coin.nextInt() == 0)); また、このストリームを削減して、たとえばデータセットの2つのランダムな半分を表す2つのリストを取得し、それらをストリームに戻す方法も確認できます。しかし、最初のストリームから2つのストリームを生成する直接的な方法はありますか?何かのようなもの (heads, tails) = stream.[some kind of split based on filter] 洞察をありがとう。
146 java  java-8  java-stream 


7
Java 8ストリーム-収集と削減
いつcollect()vs を使用しreduce()ますか?誰かがどちらか一方に行く方が間違いなく良いときの良い具体的な例がありますか? Javadocは、collect()は変更可能な縮小であると述べています。 これは変更可能な削減であることを考えると、同期が(内部で)必要であり、その結果、パフォーマンスが低下する可能性があります。おそらくreduce()、reduceの各ステップの後に返すために新しいデータ構造を作成する必要があるという犠牲を払って、より容易に並列化できます。 上記のステートメントは当て推量ですが、ここでチャイムを鳴らす専門家が大好きです。
143 java  java-8  java-stream 

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