Java8 Stream method

2022-08-20  本文已影响0人  Tinyspot

Comparator

// java.util.Collections#sort(java.util.List<T>, java.util.Comparator<? super T>)
public static <T> void sort(List<T> list, Comparator<? super T> c) {
    list.sort(c);
}
// e.g.
List<Apple> apples = new ArrayList<>();
Collections.sort(apples, new Comparator<Apple>() {
    @Override
    public int compare(Apple o1, Apple o2) {
        return o1.getWeight() - o2.getWeight();
    }
});
// e.g.
apples.sort(Comparator.comparing(Apple::getWeight));
Collections.sort(employees, (o1, o2) -> o1.getAge() - o2.getAge());

Collectors

import static java.util.stream.Collectors.*;

Comparator<OrderDO> comparator = Comparator.comparingInt(OrderDO::getId);
Optional<OrderDO> maxId = list.stream().collect(Collectors.maxBy(comparator));
// 字符串连接
String names = list.stream().map(OrderDO::getName).collect(Collectors.joining(","));
// 汇总
Integer collect = list.stream().collect(summingInt(OrderDO::getId));
Integer collect2 = list.stream().mapToInt(OrderDO::getId).sum();
Integer collect3 = list.stream().collect(reducing(0, OrderDO::getId, (i, j) -> i + j));
Integer collect4 = list.stream().map(OrderDO::getId).reduce(0, (i, j) -> i + j);

groupBy

Map<String, List<OrderDO>> maps = list.stream().collect(groupingBy(OrderDO::getType));
Map<Boolean, List<OrderDO>> collect = list.stream().collect(groupingBy(orderDO -> orderDO.getId() > 20));
// 对分组中的元素进行操作
Map<String, List<OrderDO>> collect1 = list.stream().collect(groupingBy(OrderDO::getType, filtering(orderDO -> orderDO.getId() > 20, toList())));
Map<String, List<Integer>> collect2 = list.stream().collect(groupingBy(OrderDO::getType, mapping(OrderDO::getId, toList())));
// 疑问点
Map<String, Set<String>> collect = goodsList.stream().collect(
      groupingBy(Goods::getName,
            flatMapping(goods -> maps.get(goods.getName()).stream(), Collectors.toSet())));

Map<String, Map<String, List<OrderDO>>> collect2 = orderList.stream().collect(
                groupingBy(OrderDO::getType,   // 一级分类函数
                        groupingBy(OrderDO::getName))); // 二级分类函数
// 分组收集
Map<String, Integer> collect1 = orderList.stream().collect(
                groupingBy(OrderDO::getType, summingInt(OrderDO::getId)));

partitioningBy

Map<Boolean, List<OrderDO>> map = orderList.stream().collect(partitioningBy(orderDO -> orderDO.getId() > 20));
 List<OrderDO> result = map.get(true);

source code

ArrayList<Object> list = orders.stream().collect(ArrayList::new, List::add, List::addAll);

Collection API

Map 计算模式

上一篇 下一篇

猜你喜欢

热点阅读