【发布时间】:2018-09-26 15:11:55
【问题描述】:
private Map<String, Set<Square>> populateZuloSquare(List<Square> squares) {
if (squares == null || squares.isEmpty()) {
return emptyMap();
}
Map<String, Set<Square>> res = new HashMap<>();
squares.stream()
.filter(square -> {
if (square.getZuloCodes().isEmpty()) {
LOG("Ignored {}", square.id);
return false;
}
return true;
})
.forEach(square -> {
square.getZuloCodes()
.forEach(code -> {
res.putIfAbsent(code, new HashSet<>());
res.get(code).add(square);
}));
});
return Collections.unmodifiableMap(res);
}
上面的代码接收一个 Squares 列表,这些 Squares 里面可能包含 ZuloCodes。输出应该是一个不可变的 Map zuloCode,并使用该 UniquePrefix 对所有正方形进行赋值。 如您所见,我无法找到删除辅助集合 res 并使代码易于阅读的方法,有没有办法将该集合分解为 [zuloCode, square] 然后 collect.groupBy ?另外,如果过滤器内部如此难以阅读,您将如何解决?
【问题讨论】:
标签: java-8 java-stream collectors