JDK8 stream 流的簡單使用
- 2020年4月15日
- 排序,分組,遍歷,求和,去重等
測試Demo 實體
package com.ezhiyang.controller;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@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