package com.lq.lqspringboot.common.stream;
import com.lq.lqspringboot.common.entity.Student;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author :liuqian
* @date :Created in 2022/4/6 17:53
* @description:
*/
public class StreamTest {
/**
* filter 用法
*/
public static void getFilterNull(){
List<Student> results = new ArrayList();
for (int i=0;i<5;i++){
Student st = new Student();
st.setAge(i);
st.setName("lisi"+i);
if(i==0 || i==3){
st.setIsFeedback(0);
}else if(i==1){
st.setIsFeedback(1);
}else{
st.setIsFeedback(null);
}
results.add(st);
}
results = results.stream()
.filter(r -> null != r.getIsFeedback())
.filter(r -> 1 == r.getIsFeedback())
.collect(Collectors.toList());// 过滤掉未反馈数据
System.out.println("results = " + results.toString());
List<Integer> list33 = results.stream().map(r -> r.getAge()).collect(Collectors.toList());
List<String> nameList = results.stream().map(r -> r.getName()).collect(Collectors.toList());
System.out.println("输出=" + nameList);
}
/**
* filter 用法
*/
public static void getFilterTest(){
List<Integer> list = new ArrayList();
for (int i=0;i<10;i++){
list.add(i);
}
Integer ii = null;
list.add(1);
list.add(ii);
list.add(1);
list = list.stream().filter(r-> 0 == r).collect(Collectors.toList());
System.out.println("list.count = "+list.size());
System.out.println("list = "+list.toString());
}
/**
* map用法
*/
public static void getMapTest(){
List<Integer> list = new ArrayList();
for (int i=0;i<10;i++){
list.add(i);
}
}
/**
* 去重
*/
public static void getDistinctTest(){
List<Integer> list = new ArrayList();
for (int i=0;i<10;i++){
list.add(i);
}
list.add(1);
list = list.stream().distinct().collect(Collectors.toList());
System.out.println("list="+list.toString());
}
/**
* 测试分组
*/
public static void getGroupStream(){
// 测试数据
List<Student> list = new ArrayList<>();
for (int i=0;i<10;i++){
Student st = new Student();
st.setAge(i);
if(i%2 == 0){
st.setIsFeedback(0);
}else{
st.setIsFeedback(1);
}
st.setName("测试"+i);
list.add(st);
}
/*
* Map<String, List<WorkflowParticiantBean>> rMap = list.stream().collect(Collectors.groupingBy(WorkflowParticiantBean :: getRoleCode, Collectors.toList()));
*/
// 以isFeedback 为key,list 为value 创建 Map
Map<Integer,List<Student>> map = list.stream().collect(Collectors.groupingBy(Student :: getIsFeedback,Collectors.toList()));
System.out.println("打印数据结果 = "+map);
}
/**
* 去重操作
*/
public static void getFilterAttributeClass() {
/*assessmenBeans.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(o -> o.getModule() + o.getResponseRoleCode()))
), ArrayList::new));*/
List<Student> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Student st = new Student();
st.setName("李四" + i);
st.setAge(i + 5);
if (i % 2 == 0) {
st.setSex("男");
st.setScore(2);
} else {
st.setScore(0);
st.setSex("女");
}
list.add(st);
}
list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(o -> o.getScore() + o.getSex()))
), ArrayList::new));
System.out.println("输出list=" + list);
// list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getScore() + o.getSex()))), ArrayList::new));
}
/**
* List 转换map
*/
public static void getListTransferMap(){
List<Student> list = getStudentList();
// 方法1 ,value 为属性值
Map<Long, String> map1 = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));
System.out.println("map1="+map1);
// 方法1.1, 属性值处理后转换
Map<String, String> map11 = list.stream().collect(Collectors.toMap(k -> (k.getId() + k.getAge()+""), v -> v.getName()));
System.out.println("map11="+map11);
// 做判断
Map<Long, String> map12 = list.stream().collect(Collectors.toMap(Student::getId, t->t.getName()));
System.out.println("map12="+map12);
// 方法2,key是对象中的某个属性值,value是对象本身(使用返回本身的lambda表达式)
Map<Long, Student> map2 = list.stream().collect(Collectors.toMap(Student::getId, Student -> Student));
System.out.println("map2="+map2);
// 情况3,key是对象中的某个属性值,value是对象本身(使用Function.identity()的简洁写法)。
Map<Long, Student> map3 = list.stream().collect(Collectors.toMap(Student::getId, Function.identity()));
System.out.println("map3="+map3);
// 情况4,key是对象中的某个属性值,value是对象本身,当key冲突时选择第二个key值覆盖第一个key值
// 如果不正确指定Collectors.toMap方法的第三个参数(key冲突处理函数),那么在key重复的情况下该方法会报出【Duplicate Key】的错误导致Stream流异常终止
Map<Long, Student> map4 = list.stream().collect(Collectors.toMap(Student::getId, Function.identity(), (t1, t2) -> t2));
System.out.println("map4="+map4);
}
// 获取list 数组
public static List<Student> getStudentList(){
List<Student> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Student st = new Student();
st.setId(Long.valueOf(i));
st.setName("李四" + i);
st.setAge(i + 5);
if (i % 2 == 0) {
st.setSex("男");
st.setScore(2);
} else {
st.setScore(0);
st.setSex("女");
}
list.add(st);
}
return list;
}
public static void main(String[] args) {
// getFilterTest();
// getDistinctTest();
// List<String> list = Collections.EMPTY_LIST;
// System.out.println("list="+list);
// getFilterNull();
// getGroupStream();
// 测试list 对象属性去重操作
// getFilterAttributeClass();
// getFilterNull();
// 转Map
getListTransferMap();
}
}
Stream 处理
最新推荐文章于 2024-05-19 20:39:37 发布