問題タブ [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.

0 投票する
3 に答える
199 参照

dictionary - ストリームを使用したマッピングのエラー

現在、Java 8 ストリームの使用方法を理解するのに苦労しています。lista_dottori( ) から、すべての医療専門分野 ( メソッド) に、この専門分野を持つ医師がいる患者の数をマップMap<Integer, Doctor>する新しいマップに移動しようとしています (クラス内のメソッドは、その医師の患者のa を返します)。この目的でカウント方法を使用する方法を理解できず、インターネット上でこの種の問題の例や説明を見つけることができないようです。patientsPerSpgetSpecializationgetPatientsDoctorList

それは私が書いたものです、それは私にカウントセクションでエラーを与えます:

0 投票する
3 に答える
16684 参照

java - ストリームの要素を数える

ストリームのさまざまな要素を数えたいのですが、その理由がわかりません

動作しません。エクリプスが教えてくれる

Collectors 型のメソッド toMap(Function, Function, BinaryOperator) は、引数 (( s) -> {}, int, Integer::sum) には適用できません。

ちなみに、私はその解決策について知っています:

だから私は2つの質問があります:

  1. 私の最初のアプローチの間違いは何ですか?
  2. そのようなカウンターをどのように実装しますか?

編集:私は自分で最初の質問を解決しました:

Java は、2 番目の引数として関数を期待しています。

0 投票する
1 に答える
4475 参照

java - Java 8 ラムダのネストされたマップ

次の問題を解決するためにJava-8ラムダを使用しようとしています:

a が与えられたList<Transaction>場合、それぞれについて、 perの合計とperのCategory.minorCategory合計が必要です。以下のコードに従って、これが機能しています。でグループ化する必要があり、基本的にキー付きの を返します。Transaction.amountCategory.minorCategoryMapTransaction.accountNumberTransaction.amountTransaction.accountNumberCategory.majorCategoryMap<String, Map<String, MinorCategorySummary>>Category.majorCategory

グループ化の段階まですべてが機能していますCategory.majorCategoryが、解決策を見るのに苦労しています。ラムダを使用したプログラミングのパラダイム シフトは、学習曲線が急勾配であることを証明しています。

TransactionBreakdownアクションが発生する場所であり、 を返したい場所Map<String, Map<String, MinorCategorySummary>>です。

0 投票する
2 に答える
13414 参照

java-8 - Java 8 Collectors groupingBy を使用して、コレクションのマップを持つマップを取得する方法は?

これらのクラスを想像してください

それらのサブジェクトクラスのリストがあります

最初にオブジェクトをグループ化し、次にグループ化しCollectors.groupingBy()たマップを使用した結果として取得したいと思いますSubjectSubject.originSubject.type

結果としてこのようなオブジェクトを取得するMap<String, Map<Type, List<Subject>>>

0 投票する
2 に答える
1538 参照

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 コレクターを使用することと同じだと思います。

だから私の質問は:

  1. この動作は意図されたものですか、それともバグですか?
  2. はいの場合、それはどこかに文書化されていますか?Stream.skip()のドキュメントを読みました。順序付けられていない端末操作については何も述べていません。また、Characteristics.UNORDEREDのドキュメントはあまり理解されておらず、ストリーム全体で順序付けが失われるとは述べていません。最後に、パッケージ概要の注文セクションもこのケースをカバーしていません。おそらく私は何かが欠けていますか?
  3. 順序付けされていない端末操作によってストリーム全体が順序付けされていないことが意図されている場合、なぜunordered()step がこの時点以降だけ順序付けされないようにするのですか? この動作に頼ることができますか? それとも、最初のテストがうまく機能しただけで幸運でしたか?
0 投票する
5 に答える
44456 参照

java - Java 8 Collectors.toMap ソートマップ

私は Java 8 ラムダを使用Collectors toMapしており、 を返すために使用したいと考えていますSortedMap。私が思いつく最善の方法は、次のCollectors toMapメソッドをダミーmergeFunctionmapSupplier等号で呼び出すことTreeMap::newです。

ただし、次throwingMerger()の基本的な実装と同じように、マージ関数を渡したくありません。toMap

Collectorsを返すために使用するベストプラクティスの方法は何SortedMapですか?