問題タブ [collectors]
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.
dictionary - ストリームを使用したマッピングのエラー
現在、Java 8 ストリームの使用方法を理解するのに苦労しています。lista_dottori
( ) から、すべての医療専門分野 ( メソッド) に、この専門分野を持つ医師がいる患者の数をマップMap<Integer, Doctor>
する新しいマップに移動しようとしています (クラス内のメソッドは、その医師の患者のa を返します)。この目的でカウント方法を使用する方法を理解できず、インターネット上でこの種の問題の例や説明を見つけることができないようです。patientsPerSp
getSpecialization
getPatients
Doctor
List
それは私が書いたものです、それは私にカウントセクションでエラーを与えます:
java - ストリームの要素を数える
ストリームのさまざまな要素を数えたいのですが、その理由がわかりません
動作しません。エクリプスが教えてくれる
Collectors 型のメソッド toMap(Function, Function, BinaryOperator) は、引数 (( s) -> {}, int, Integer::sum) には適用できません。
ちなみに、私はその解決策について知っています:
だから私は2つの質問があります:
- 私の最初のアプローチの間違いは何ですか?
- そのようなカウンターをどのように実装しますか?
編集:私は自分で最初の質問を解決しました:
Java は、2 番目の引数として関数を期待しています。
java - Java 8 ラムダのネストされたマップ
次の問題を解決するためにJava-8ラムダを使用しようとしています:
a が与えられたList<Transaction>
場合、それぞれについて、 perの合計とperのCategory.minorCategory
合計が必要です。以下のコードに従って、これが機能しています。でグループ化する必要があり、基本的にキー付きの を返します。Transaction.amount
Category.minorCategory
Map
Transaction.accountNumber
Transaction.amount
Transaction.accountNumber
Category.majorCategory
Map<String, Map<String, MinorCategorySummary>>
Category.majorCategory
グループ化の段階まですべてが機能していますCategory.majorCategory
が、解決策を見るのに苦労しています。ラムダを使用したプログラミングのパラダイム シフトは、学習曲線が急勾配であることを証明しています。
TransactionBreakdown
アクションが発生する場所であり、 を返したい場所Map<String, Map<String, MinorCategorySummary>>
です。
java-8 - Java 8 Collectors groupingBy を使用して、コレクションのマップを持つマップを取得する方法は?
これらのクラスを想像してください
それらのサブジェクトクラスのリストがあります
最初にオブジェクトをグループ化し、次にグループ化しCollectors.groupingBy()
たマップを使用した結果として取得したいと思いますSubject
Subject.origin
Subject.type
結果としてこのようなオブジェクトを取得するMap<String, Map<Type, List<Subject>>>
java - 順序付けられていない端末操作での Stream.skip の動作
私はすでにこれとこのStream.skip
質問を読みましたが、観測された動作がJDKの作成者によって意図されたものであるかどうかはまだ疑問です.
1..20 の数字を簡単に入力してみましょう:
unordered()
次に、並列ストリームを作成しskip()
、さまざまな方法で を組み合わせて、結果を収集しましょう。
ここでは、フィルタリング ステップは基本的に何もしませんが、ストリーム エンジンの処理がさらに難しくなります。現在、出力の正確なサイズがわからないため、一部の最適化がオフになっています。次の結果があります。
結果はまったく問題なく、すべてが期待どおりに機能します。最初のケースでは、最初の 2 つの要素をスキップしてから、特定の順序でリストに収集するように依頼しました。2 番目のケースでは、最初の要素をスキップするように依頼し、次に unordered に変えて、もう 1 つの要素をスキップするように依頼しました (どの要素かは気にしません)。3 番目のケースでは、最初に順不同モードになり、次に任意の 2 つの要素をスキップしました。
1 つの要素をスキップして、非順序モードでカスタム コレクションに収集しましょう。カスタム コレクションは次のようになりますHashSet
。
出力は満足のいくものです:
したがって、一般に、ストリームが順序付けられている限りskip()
、最初の要素をスキップし、それ以外の場合は任意の要素をスキップすることを期待しています。
ただし、同等の順序付けられていない端末操作を使用しましょうcollect(Collectors.toSet())
。
出力は次のようになります。
他の順序付けられていない端末操作 ( 、 、 など) でも同じ結果が得forEach
られfindAny
ますanyMatch
。この場合、ステップを削除unordered()
しても何も変わりません。stepunordered()
は現在の操作からストリームを正しく順不同にしますが、順不同の端末操作は、skip()
使用された場合に結果に影響を与える可能性があるにもかかわらず、最初からストリーム全体を順不同にします。これは私にとって完全に誤解を招くようです: unordered コレクターを使用することは、端末操作の直前にストリームを unordered モードにして、同等の ordered コレクターを使用することと同じだと思います。
だから私の質問は:
- この動作は意図されたものですか、それともバグですか?
- はいの場合、それはどこかに文書化されていますか?Stream.skip()のドキュメントを読みました。順序付けられていない端末操作については何も述べていません。また、Characteristics.UNORDEREDのドキュメントはあまり理解されておらず、ストリーム全体で順序付けが失われるとは述べていません。最後に、パッケージ概要の注文セクションもこのケースをカバーしていません。おそらく私は何かが欠けていますか?
- 順序付けされていない端末操作によってストリーム全体が順序付けされていないことが意図されている場合、なぜ
unordered()
step がこの時点以降だけ順序付けされないようにするのですか? この動作に頼ることができますか? それとも、最初のテストがうまく機能しただけで幸運でしたか?
java - Java 8 Collectors.toMap ソートマップ
私は Java 8 ラムダを使用Collectors
toMap
しており、 を返すために使用したいと考えていますSortedMap
。私が思いつく最善の方法は、次のCollectors
toMap
メソッドをダミーmergeFunction
とmapSupplier
等号で呼び出すことTreeMap::new
です。
ただし、次throwingMerger()
の基本的な実装と同じように、マージ関数を渡したくありません。toMap
Collectors
を返すために使用するベストプラクティスの方法は何SortedMap
ですか?