Tôi có Map<A, Map<B, C>>
và tôi muốn nhận được Map<B, List<C>>
từ nó bằng cách sử dụng Luồng Java.Luồng Java: nhận các giá trị được nhóm theo khóa bản đồ bên trong
tôi cố gắng để làm điều đó như sau:
public <A, B, C> Map<B, List<C>> groupsByInnerKey(Map<A, Map<B, C>> input) {
return input.values()
.stream()
.flatMap(it -> it.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey));
}
Những gì tôi mong đợi:
flatMap
đưa ra mộtStream
củaMap.Entry<B, C>
collect(Collectors.groupingBy(...))
mất chức năng mà được áp dụng choMap.Entry<B, C>
và trảB
, do đó, nó thu thập các giá trị củaC
vàoList<C>
.
Nhưng nó không biên dịch, nghĩa đen:
phương phápNon-tĩnh không thể được tham chiếu từ một bối cảnh tĩnh
tại Map.Entry::getKey
trong dòng cuối cùng.
Ai đó có thể giải thích điều gì sai hoặc cách nào đúng để đạt được những gì tôi muốn?
Có thể trùng lặp: http://stackoverflow.com/questions/29373026/how-to-get-all-values-from-the-inner-maps-of-a-map-using-a-common -key –
@ShiladittyaChakraborty, không thực sự, tôi hỏi về lý do tại sao cách dự kiến thực hiện điều này không hiệu quả. Ngoài ra, nhiệm vụ hơi khác so với câu hỏi bạn đã tham chiếu. – hotkey