2016-10-23 4 views
0

다음 코드는 작동합니다. 내 목표는 최대입니다 노드 수의 수를 얻고 스트림을 사용하여이 작업을 수행하는 더 나은 방법이 있는지 궁금스트림을 사용하여 값 목록을 다른 목록으로 변환

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()); 

아래로하는 것입니다. 하나의 작업으로 결합 될 수 있습니까? 당신은 마무리 작업, 예를 들어, 같은 집에 두 번째 작업을 병합 할 수

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()); 

:

+0

이 코드는 컴파일되지 않으므로 작동하지 않습니다. – Tunaki

+0

... 그리고 여전히 컴파일 할 수 없다는 것을 알 수 있습니다. 코드를 그대로 복사하여 붙여 넣는 것이 어떻습니까? 그리고, 아니, 스트림 API를 사용하여, 당신은 이것을 할 수있는 더 좋은 방법이 없을 것입니다, 아마도 StreamEx 라이브러리를 들여다 보겠습니다. [이 답변을 참조하십시오] (http://stackoverflow.com/a/36445457/1743880)). – Tunaki

+0

두 번째 성명서로 무엇을하고 있습니까? –

답변

1

당신은 하나 으로, 기술적으로하지만, 그것은 두 개의 스트림 작업을 구성하여 작업을 쓸 수 있습니다 collectingAndThen을 통해 두 번째 스트림 작업을 잘 알려진 키 truefalse의 두 가지 조회로 바꿀 수도 있습니다. 그러나 실제로는 하나의 스트림 작업이지만 실제로 이점은 없습니다.

관련 문제