英文:
How can I simplify this expression using Collectors.groupingby()?
问题
如何使用Collectors.groupingBy()来简化这个表达式?这将是最佳解决方案吗?还是有更好的方法?
public Map<String, List<Account>> findAllAccounts(final List<String> listOfIds) {
Map<String, List<Account>> result = listOfIds.stream()
.collect(Collectors.groupingBy(id -> id, Collectors.mapping(this::getAccount, Collectors.toList())));
return result;
}
英文:
How can I simplify this expression using Collectors.groupingby()? Will it be the best solution or are there any better?
public Map<String, List<Account>> findAllAccounts(final List<String> listOfIds) {
Map<String, List<Account>> result = new HashMap<>();
listOfIds.forEach(id ->
result.put(id , getAccount(id)));
return result;
}
答案1
得分: 2
轻而易举,就像日本人一样!
public Map<String, List<Account>> findAllAccounts(List<String> listOfIds) {
return listOfIds.stream()
.map(this::getAccount)
.collect(Collectors.groupingBy(Account::getId, Collectors.toList()));
}
附注: 假设 getAccount(String id)
是一个轻量级方法,而不是访问数据库的方法,例如。
英文:
easy-peasy, japanesey!
public Map<String, List<Account>> findAllAccounts(List<String> listOfIds) {
return listOfIds.stream()
.map(this::getAccount)
.collect(Collectors.groupingBy(Account::getId, Collectors.toList()));
}
P.S. assuming that getAccount(String id)
is light method and not go to DB e.g.
答案2
得分: 1
你可以在你的情况下使用 Collectors.toMap
。根据你的代码,我猜 getAccount()
会返回 List<Account>
。
listOfIds.stream().collect(Collectors.toMap(id -> id, id -> getAccount(id)));
英文:
You can use Collectors.toMap
for your case. And with your code, I am guessing getAccount()
will return List<Account>
listOfIds.stream().collect(Collectors.toMap(id -> id, id -> getAccount(id)));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论