我有以下代码可以正常工作。我的目标是计算上下节点的数量
Map<Boolean, Long> counting = nodes.stream()
.collect(Collectors.groupingBy(ClusterNode::IsUp,Collectors.counting()));
List<DataPoint> dps = counting.keySet().stream()
.map(k -> new DataPoint(timestamp, counting.get(k).toString(), cluster, k.toString()))
.collect(Collectors.toList());
想知道是否有更好的方法可以使用流来完成此操作。它可以组合成一个操作吗?
答案 0 :(得分:1)
您可以将操作编写为一个语句,但从技术上讲,它包含两个Stream操作:
List<DataPoint> dps = nodes.stream()
.collect(Collectors.partitioningBy(ClusterNode::IsUp, Collectors.counting()))
.entrySet().stream()
.map(e->new DataPoint(timestamp, e.getValue().toString(), cluster, e.getKey().toString()))
.collect(Collectors.toList());
您可以将第二个操作合并到收集器中作为完成操作,例如通过collectingAndThen
,您也可以通过两次查找已知密钥true
和false
来替换第二个Stream操作,然后,它确实是一个Stream操作,但是,对于no实际利益。