私は働いている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";
}
}
今、私は何をしようとしていることは、私がしたい、次のとおりです。
- (地図<>ルックアップを使用して)SENDERIDが無効であるレコードを除外する
- グループ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
注意:
groupingBy
値の結果は、として集計される属性List
。Collector
内で定義されcollect
、それはあなたの試みと異なって。