2017-10-31 1 views
1

이 그룹 코드를 감안할 때 : 변경하는 간결한 방법을 무엇그룹에 의해,하지만 가치 요소를 변환 간결

List<Input> inputs = getInputs(); 
Map<LocalDateTime, List<Input>> inputsByDate = 
    inputs.stream() 
     .collect(
     groupingBy(input -> input.getDateTime())); 

을 그래서 우리가 할 수있는 우리가 가진 기능을 통해 각각의 입력을 실행할 때마다 맵의 키 List<Output>에 대한 출력 서명 private Output convertToOutput(Input input) {}?

Output 클래스에는 메서드가 없으므로 먼저 수행해야하지만 변형되지 않은 객체는 필요하지 않습니다. 변환 된 객체가 필요합니다.

GroupBy 메서드는 Func<TSource, TElement> elementSelector을 제공하므로 값 부분을 변환 할 수 있으므로 C# Linq-To-Objects에서는 쉽게 처리 할 수 ​​있습니다. 어떻게 이것을 커스텀 코드없이 자바에서 쉽게 할 수 있습니까?

답변

2

사용 Collectors.mapping :

// ... 
.collect(
    Collectors.groupingBy(
     input -> input.getDateTime()), 
     Collectors.mapping( // <--- This 
      TheClass::convertToOutput, 
      Collectors.toList());