JDK8 stream 流的简单使用

JDK8 stream 流的简单使用

  • 2020年4月15日
  • 排序,分组,遍历,求和,去重等

测试Demo 实体

package com.ezhiyang.controller;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Caixiaowei
 * @ClassName Demo.java
 * @Description 测试demo
 * @createTime 2020年04月15日 15:01:00
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Demo {

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private Integer age;
    
}
  • 使用了lombok 插件
  • @Data 所有属性的get和set方法,toString(), hashCode(), equals()
  • @AllArgsConstructor 生成含所有属性的构造函数
  • @NoArgsConstructor 生成无参构造

测试

    @Test
    public void testStream() {
        List<Demo> list = Lists.newArrayList(new Demo("张三", 15), new Demo("李四", 20));
        System.out.println("list: " + JSONObject.toJSONString(list));

        // 过滤
        List<Demo> collect = list.stream().filter(demo -> demo.getAge() > 15).collect(Collectors.toList());
        System.out.println("过滤 age > 15 data: " + JSONObject.toJSONString(collect));

        // 分组
        Map<String, List<Demo>> listMap = list.stream().collect(Collectors.groupingBy(demo -> demo.getName()));
        System.out.println("按名字分组 listMap: " + JSONObject.toJSONString(listMap));

        // 遍历
        list.stream().forEach(demo -> {
            System.out.print("name: ");
            System.out.println(demo.getName());
        });

        // 排序
        collect.clear();
        collect = list.stream().sorted((d1, d2) -> {
            return d2.getAge().compareTo(d1.getAge());
        }).collect(Collectors.toList());
        System.out.println("按age倒序 collect: " + JSONObject.toJSONString(collect));

        // 求和
        Integer sum = list.stream().map(Demo::getAge).reduce(0, (a, b) -> a + b);
        System.out.println("求和 sum: " + sum);
    }
  • 控制台打印
list: [{"age":15,"name":"张三"},{"age":20,"name":"李四"}]

过滤 age > 15 data: [{"age":20,"name":"李四"}]

按名字分组 listMap: {"李四":[{"age":20,"name":"李四"}],"张三":[{"age":15,"name":"张三"}]}

name: 张三
name: 李四

按age倒序 collect: [{"age":20,"name":"李四"},{"age":15,"name":"张三"}]

求和 sum: 35
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章