yateen:
私は、ユースケースに続いています:
User Object is as followed:
UserId payload
123 abc1
123 abc2
456 pqr1
456 pqr2
678 xyz1
And after iterating above list<User Object>, Result should be like:
{123=[abc1, abc2], 456=[pqr1,pqr2], 678=[xyz1]}
私は、さらなる処理のためにキー(123)の値(他のオブジェクトのリスト)を使用することができます。それを行うための最善の方法は何でしょうか?
私は下に試みたが、していないことを確認どのようにオブジェクトのサイズが大きくなると、効率的なパフォーマンス。
Map<String,List<String>> userMap = new HashMap<String, List<String>>();
for(User user: users) {
String userId = user.getUserId();
List<String> payloads = new ArrayList<String>();
if(userMap.containsKey(userId)) {
payload = userMap.get(userId);
payloads.add(user.getPayload());
userMap.put(userId, payloads);
}
else {
payloads.add(user.getPayload());
userMap.put(user.getUserId(), payloads);
}
}
ジェイコブG.:
最も簡単な方法は、になり、使用すると:stream
List
Collectors#groupingBy
Collectors#mapping
Map<String, List<String>> userMap = users.stream()
.collect(Collectors.groupingBy(User::getUserId,
Collectors.mapping(User::getPayload, Collectors.toList())));
出力:
{123=[abc1, abc2], 456=[pqr1, pqr2], 678=[xyz1]}