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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章