Javaの8つのストリームを使用してGroupingBy

iam.Carrot:

私は働いているJava 8 Streams私は、以下のようなクラスを持っています:

public class ShareDao {
    private String senderId;
    private String receiverId;

    public String getSenderId() {
        return senderId;
    }

    public String sharingMode(){
        return this.receiverId != null && !this.receiverId.trim().isEmpty() ? "incoming" : "outgoing";
    }
}

今、私は何をしようとしていることは、私がしたい、次のとおりです。

  1. (地図<>ルックアップを使用して)SENDERIDが無効であるレコードを除外する
  2. グループSENDERIDによって収集し、shareModeことにより、さらなるグループにそれらを。

以下は、私のコードは次のようになります。

Map<String, Map<String, List<ShareDao>>> p = records.stream()
            .filter(shared -> userMap.containsKey(shared.getSenderId()))
            .collect(Collectors.groupingBy(ShareDao::getSenderId), Collectors.groupingBy(ShareDao::sharingMode, Function.identity()));

それは私にエラーがスローされます:

エラー:(105、90)のjava:もし適切な方法はgroupingBy(シェア[...] gMode、java.util.function.Function)メソッドjava.util.stream.Collectors.groupingBy(java.util.function.Functionが見つかりません)適用されない(できないタイプの変数(S推論)T、K(実際の仮引数リストの長さが異なる))方法java.util.stream.Collectors.groupingBy(java.util.function.Function、java.utilの。 stream.Collector)は(ないインスタンス(S)型変数のは、(S)Tが存在しない適用されないので、java.util.stream.Collector)メソッドjava.util.stream.Collectors.groupingByにjava.util.function.Functionの準拠(java.util.function.Function、java.util.function.Supplier、java.util.stream.Collector)が(できないタイプの可変推論(S)T、K、D、A、M(実際の及びフォーマル適用されません引数リスト)は、長さが異なります)

一方でIntellij Ideaエラーが発生します

Non-Static method cannot be referenced from static context

また:

あなたが達成しようとしているものに基づいて、

  • (地図<>を使用してSENDERIDが無効であるレコードのうち、フィルタ
    検索を)
  • グループSENDERIDによって収集し、shareModeことにより、さらなるグループにそれらを。

あなたの代わりに使用することができます。

Map<String, Map<String, List<ShareDao>>> p = records.stream()
        .filter(shared -> userMap.containsKey(shared.getSenderId())) // filter records
        .collect(Collectors.groupingBy(ShareDao::getSenderId, // grouping by senderId
                Collectors.groupingBy(ShareDao::sharingMode)));  //further grouping by sharingMode

注意

  1. groupingBy値の結果は、として集計される属性List

  2. Collector内で定義されcollect、それはあなたの試みと異なって。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=99010&siteId=1