私は例つのオブジェクト
にすべての重複したエントリをマージして、重複を持つことができ、リストから独自の友達リストを生成する必要があります - 友達が異なる社会のフィードからフェッチされ、1に入れますビッグリスト
1.フレンド - [名前: "ジョニーデップ"、dob: "1970-11-10"、出典: "FB"、fbAttribute: ".."]
2.フレンド - [name: "Christian "、"寄稿者: "1970年1月10日"、ドバイ: "1970年 - 01年"、ソース: "LI"、LiAttribute: ".."]
3.友人 - [名前: "ジョニーデップ"ソース: "Twitter"、twitterAttribute: ".."]
4.友達 - [名前: "Johnny Depp"、dob: "1970-11 "名前:" Christian Bale "、dob:" 1970-01-01 "、出典:" LI "、liAttribute:"友達の名前: "リンク先:" LinkedIn "、liAttribute:" .. "]
.. "]
Javaストリームマージまたは重複するオブジェクトを減らす
の予想される出力
1.フレンド - [名: "クリスチャン・ベール"、DOB: "1970-01-01"、liAttribute:" .. "fbAttribute:" ..」 、twitterAttribute: ".."]
2.フレンド - [名前: "ジョニーデップ"、dob: "1970-11-10"、liAttribute: ".."、fbAttribute: ".."、twitterAttribute: " "]
質問 - どうすれば私たちとマージできますか?すべての中間コンテナはありますか?私は簡単に中間マップを使用して、エントリの各値にreduceを適用することができます。
List<Friend> friends;
Map<String, List<Friend>> uniqueFriendMap
= friends.stream().groupingBy(Friend::uniqueFunction);
List<Friend> mergedFriends = uniqueFriendMap.entrySet()
.stream()
.map(entry -> {
return entry.getValue()
.stream()
.reduce((a,b) -> friendMergeFunction(a,b));
})
.filter(mergedPlace -> mergedPlace.isPresent())
.collect(Collectors.toList());
私は中間の地図uniqueFriendMapを使用せずにこれをしたいです。助言がありますか?
こんにちはHolger、多分あなたは 'Collectors.groupingBy'を' Collectors.toMap'と置き換えることができました。これは 'Map uniqueFriendMap = friends.stream()。collect(Collectors.toMap(Friend :: uniqueFunction、 Function.identity()、this :: friendMergeFunction)); '、それはずっと簡単だと思いませんか? –