3 回答

TA貢獻1775條經驗 獲得超8個贊
如果調用成本很高,那么您最初的想法可以自行執行。它可以進一步縮短為:getCsByIds
public Map<A, List<C>> convert(Collection<A> as) {
List<Long> cIds = as.stream()
.flatMap(a -> a.getBs().stream())
.map(B::getIdOfC)
.collect(Collectors.toList());
Map<Long, C> csMap = getCsByIds(cIds).stream()
.collect(Collectors.toMap(C::getId, Function.identity()));
return as.stream()
.collect(Collectors.toMap(Function.identity(),
a -> a.getBs().stream().map(b -> csMap.get(b.getIdOfC()))
.collect(Collectors.toList()), (a, b) -> b));
}
您可以在其中相應地選擇合并功能。(a,b) -> b

TA貢獻1780條經驗 獲得超5個贊
也許只是直接迭代 As?(手頭沒有編譯器,所以也許代碼段還沒有編譯就緒)
public Map<A, List<C>> convert(Collection<A> as) {
Map<A, List<C>> result = new HashMap<>();
for(A a: as){
List<Long> cIds = a.getBs().stream()
.map(B::getIdOfC)
.collect(Collectors.toList());
result.put(a, getCsByIds(cIds));
}
return result;
}

TA貢獻1877條經驗 獲得超6個贊
這樣的事情難道行不通嗎?我沒有編譯器,所以我無法真正測試它
public Map<A, List<C>> convert(Collection<A> as) {
return as.stream()
.collect(Collectors.toMap(Function::identity,
a -> a.getBs().stream()
.map(B::getIdOfC)
.flatMap(id -> getCsByIds(asList(id))
.values()
.stream())
.collect(Collectors.toList())
)
);
}
添加回答
舉報