是否有一种使用stream((功能获得以下功能的简单方法?
HashMap<String, Integer> productMap = new HashMap<>();
Integer counter = 0;
for (Product product : products) {
for (Quality quality : product.getQualities()) {
if (quality.evaluate() > Float.NEGATIVE_INFINITY) {
if (productMap.containsKey(quality.getName())) {
productMap.replace(quality.getName(), counter + 1);
} else {
productMap.put(quality.getName(), counter + 1);
}
}
}
}
正如其他人所指出的,counter
从不递增。此外,正如@Holger所提到的,没有必要检查productMap.containsKey()
。如果你真的想做同样的事情,你可以试试:
products.stream()
.flatMap(product -> product.getQualities().stream())
.filter(q -> q.evaluate() > Float.NEGATIVE_INFINITY)
.map(Quality::getName)
.forEach(qName -> productMap.put(qName, counter + 1));
首先,使用flatMap()
将products
的流转换为qualities
的流。然后过滤出那些计算值超过NEGATIVE_INFINITY
的,然后将(map()
(每个转换为其名称,并最终将它们放入映射中。