Java8 新特性相关操作

本片文章对流相关操作进行了一些整理

准备工作

首先准备一个Product类和一个 Order类

  • Product
/**
 * @Description 产品类
 * @author corey
 * @version $Id: Product.java, v 0.1 2021-10-09 18:01 corey Exp $$
 */
@Getter
@Setter
public class Product {

    private String id;

    private String productNo;
}
复制代码
  • Order
/**
 * @Description 订单类
 * @author corey
 * @version $Id: Order.java, v 0.1 2021-10-09 18:03 corey Exp $$
 */
@Getter
@Setter
public class Order {

    private String name;

    private String age;

    private String sex;

}
复制代码

总结

日常开发中有很多场景需要对List集合进行取值筛选

1.遍历-foreach

list.forEach(orders->{
    System.out.println(orders.getName());
});
复制代码

输出结果

image.png

2.筛选List

筛选age 大于22的name

List<Order> resultList = list.stream().filter(orderlist -> orderlist.getAge() > 22).collect(Collectors.toList());
resultList.stream().forEach(orderss -> {
    System.out.println(orderss.getName());

});
复制代码

结果为:

image.png

3.list去重

更具性别去重

ArrayList<Order> collectUnlike = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
        -> new TreeSet<>(Comparator.comparing(Order::getSex))), ArrayList::new));
collectUnlike.forEach(orderR ->{
    System.out.println(orderR.getName());
});
复制代码

结果为

image.png

3.取出list集合对象中某一属性

取出对象中的每一个名字,然后组成一个新集合

//取出list中每个对象中姓名组成一个新集合
List<String> nameList = list.stream().map(Order::getName).collect(Collectors.toList());
System.out.println(JSONObject.toJSON(nameList));
复制代码

结果为 image.png

3.list与map互转,并根据某一属性进行分组

list与map互相转换

// list转Map 根据性别分组
Map<String, List<Order>> collect = list.stream().collect(Collectors.groupingBy(Order::getSex));
System.out.println(JSONObject.toJSON(collect));
复制代码

结果为 { "女": [ { "sex": "女", "name": "张三", "age": 20 }, { "sex": "女", "name": "李四", "age": 21 }, { "sex": "女", "name": "王八", "age": 25 } ], "未知": [ { "sex": "未知", "name": "赵柳", "age": 24 } ], "男": [ { "sex": "男", "name": "王五", "age": 22 }, { "sex": "男", "name": "赵六", "age": 23 } ] }

4.过滤属性为空的字段

System.out.println("=======================这是分割线=============过滤属性为空的字段===================");
//过滤属性为空的字段
List<String> stringList = list.stream().map(s -> s.getName()).filter(s -> !s.isEmpty()).collect(Collectors.toList());
System.out.println(JSONObject.toJSON(stringList));
复制代码

更具年龄进行计算

System.out.println("=======================这是分割线=============更具年龄进行计算===================");
//根据某一值进行计算
IntSummaryStatistics resultNum = list.stream().mapToInt((item)->item.getAge()).summaryStatistics();
System.out.println("max:"+resultNum.getMax());

System.out.println("min:"+resultNum.getMin());

System.out.println("sum:"+resultNum.getSum());

System.out.println("average:"+resultNum.getAverage());

System.out.println("count:"+resultNum.getCount());
复制代码

结果为

image.png

  • 这里需要注意的是

1、求和有三种类型,mapToInt,mapToLong,mapToDouble

2、如果是Bigdecimal数值类型,则计算方法如下,(新建对象)

Frult frult1 = new Frult("大哥",new BigDecimal(1));

Frult frult2 = new Frult("二弟",new BigDecimal(2));

List frultList = new ArrayList<>(); frultList.add(frult1);

frultList.add(frult2);

BigDecimal totalPrice = frultList.stream().map(Frult::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);

ok常用的总结就如上了,如果有什么错误,欢迎指出,

猜你喜欢

转载自juejin.im/post/7017684707466805284