stream 分組(group)和map的值映射mapping變型寫法


參考這個流映射寫的:

stream 分組(group)和map的值映射mapping 

我們經常寫那種分組查詢的操作:根據某個id,分組聚合成Map<Long,List<String>> 類似這樣的語法。

發現一個for和別的組合在一起,比較好,單獨的一個流操作n次,本來用for可以解決的問題,使用了多次的流操作,看着花里胡哨的,實際上性能並沒有提升,反而下降了不少。

   public static void main(String[] args) {

        List<FloorElement> elementList=new ArrayList<>();
        FloorElement element=new FloorElement();
        element.setId(1l);
        element.setFloorId(1l);
        elementList.add(element);
        FloorElement element2=new FloorElement();
        element2.setId(2l);
        element2.setFloorId(1l);
        elementList.add(element2);

        Map<Long, List<FloorElement>> map = new HashMap<>();
        for (FloorElement value : elementList) {
            map.computeIfAbsent(value.getFloorId(), k -> new ArrayList<>()).add(value);
        }
   //打印的結果是兩條數據,是分組的結果,根據id ,變種的寫法
        elementList.stream() .collect(Collectors.groupingBy(FloorElement::getFloorId, Collectors.mapping(value->value, Collectors.toList())));

    }

  

 例子2:

Map<Long, List<ProductDto>> productsMap = new HashMap<>();

products.forEach(product -> {
if (productsMap.containsKey(product.getPoId())) {
productsMap.get(product.getPoId()).add(product);
} else {
List<ProductDto> productList = new ArrayList<>();
productList.add(product);
productsMap.put(product.getPoId(), productList);
}
});

上面的操作按照流的慣例:
Map<Long, List<ProductDto>> collect = products.stream().collect(Collectors.groupingBy(ProductDto::getPoId,
Collectors.mapping(value -> value, Collectors.toList())));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM