問題タブ [java-stream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 8でストリームをキャストすることは可能ですか?
Java 8 でストリームをキャストすることは可能ですか? オブジェクトのリストがあるとします。追加のオブジェクトをすべて除外するには、次のようにします。
この後、クライアントで何かをしたい場合は、それぞれをキャストする必要があります。
これは少し見栄えが悪いです。ストリーム全体を別の型にキャストすることは可能ですか? へのキャストStream<Object>
のようにStream<Client>
?
このようなことを行うと、おそらく設計が悪いことになるという事実を無視してください。私たちはコンピュータ サイエンスのクラスでこのようなことを行っているので、Java 8 の新機能を調べていて、これが可能かどうか興味がありました。
java - int のストリームを文字列に結合する、型キャストの問題
{1, 2, 3}
ストリーム (例: -> )を使用して int の配列を String に結合しようとしていますが、"1, 2, 3"
コンパイル エラーが発生し続けます。int/String 型の変換に問題があるようです。
配列はint[] IntArray = {1, 2, 3, 4}
.
コンパイルエラーが発生します:
.map(Object::toString)
マップラインをorに置き換えても.map(n -> Integer.toString(n))
機能しません:
、.map(Object::toString)
および の最初のエラー.map(n -> Integer.toString(n))
。
java - Java 8 ストリーム - 収集と削減
いつcollect()
vsを使いreduce()
ますか? いずれかの方法に進む方が確実に良い場合の具体的な良い例はありますか?
Javadoc は、 collect() が変更可能な削減であると述べています。
これが変更可能なリダクションであることを考えると、(内部的に) 同期が必要であり、それがパフォーマンスに悪影響を与える可能性があると思います。おそらくreduce()
、reduce の各ステップの後に返すために新しいデータ構造を作成する必要があるという犠牲を払って、より容易に並列化できます。
ただし、上記のステートメントは当て推量であり、ここで専門家に意見を求めたいと思います.
java - Collectors.groupingBy は null キーを受け入れません
Java 8では、これは機能します:
しかし、これはしません:
Maps は null キーを許可し、List.class.getSuperclass() は null を返します。ただし、Collectors.groupingBy は Collectors.java の 907 行目で NPE を発行します。
この行を次のように変更して、独自のコレクターを作成すると機能します。
私の質問は次のとおりです。
1) Collectors.groupingBy の Javadoc は、null キーをマップすべきではないとは言っていません。この動作は何らかの理由で必要ですか?
2) 独自のコレクターを作成せずに、null キーを受け入れる別の簡単な方法はありますか?
java - Streams を使用して BigDecimals を加算する
LinkedList
一緒に追加したいBigDecimals (この例では a ) のコレクションがあります。これにストリームを使用することは可能ですか?
Stream
クラスにいくつかのメソッドがあることに気付きました
それぞれに便利sum()
な方法があります。しかし、私たちが知っているようにfloat
、double
算術はほとんど常に悪い考えです。
では、BigDecimals を合計する便利な方法はありますか?
これは私がこれまでに持っているコードです。
ご覧のとおり、 を使用して BigDecimals を合計していますBigDecimal::doubleValue()
が、これは (予想どおり) 正確ではありません。
後世のための回答後の編集:
どちらの回答も非常に役に立ちました。少し追加したかったのですが、私の実際のシナリオでは rawBigDecimal
のコレクションは関係なく、それらは請求書に包まれています。map()
しかし、ストリームの関数を使用して、これを説明するために Aman Agnihotri の回答を変更することができました。