2017-03-20 32 views
5

tôi đã thực hiện các ví dụ sau:Java 8 lambda Collectors.groupingBy với bản đồ trong Collector.toList()

Map<String, List<Event>> map = events.getItems().stream() 
     .collect(Collectors.groupingBy(Event::getStatus, Collectors.toList())); 

Làm thế nào tôi có thể nhận được một sản lượng Map<String, List<EventDto>> map để thay thế?

Có thể thu được EventDto bằng cách thực hiện phương thức bên ngoài chuyển đổi Event thành EventDto. Ví dụ: this::convertFromEventToEventDto.

+1

là 'EventDto' và làm thế nào là nó liên quan gì đến các yếu tố của Stream của bạn? – Eran

+0

@eran Tôi nên sử dụng hàm ngoài để chuyển đổi 'Sự kiện' thành' EventDto'. Tôi nghĩ rằng trong lời giải thích có thể được sử dụng bất kỳ tên nào nếu bạn có, hoặc ví dụ 'this :: convertFromEventToEventDto' – Sergii

+1

Liệu' EventDto' có một trạng thái? – shmosel

Trả lời

9

Bạn cần một mappingCollector để lập bản đồ Event yếu tố để EventDto yếu tố:

Map<String, List<EventDto>> map = 
    events.getItems() 
      .stream() 
      .collect(Collectors.groupingBy(Event::getStatus, 
             Collectors.mapping(this::convertFromEventToEventDto, 
                  Collectors.toList()))); 
Các vấn đề liên quan