使用stream流过滤对象中相同的属性值
文章目录
- 使用stream流过滤对象中相同的属性值
- 前言
- 一、使用stream流过滤集合对象中相同属性
- 1.创建一个实体类
- 2.创建一个过滤工具类
- 3.创建一个测试类
- 总结
前言
我们在开发项目中,有很多需求是需要集合根据某个属性筛选出重复的数据,这里我写一个实例。
一、使用stream流过滤集合对象中相同属性
1.创建一个实体类
package com.gcl.streams.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {/*** 主键*/private String id;/*** 学生号*/private String stuNum;/*** 姓名*/private String name;
}
2.创建一个过滤工具类
package com.gcl.streams.utils;import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;public class StreamUtil {public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor){Set<Object> seen = ConcurrentHashMap.newKeySet();return t -> seen.add(keyExtractor.apply(t));}
}
3.创建一个测试类
package com.gcl.streams;import com.gcl.streams.entity.Student;
import com.gcl.streams.utils.StreamUtil;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {Student student1 = new Student("1", "No1", "小王");Student student2 = new Student("2", "No2", "小郭");Student student3 = new Student("3", "No2", "小高");List<Student> studentList = new ArrayList<>();studentList.add(student1);studentList.add(student2);studentList.add(student3);System.out.println(studentList);//根据学号过滤List<Student> list = studentList.stream().filter(StreamUtil.distinctByKey(Student::getStuNum)).collect(Collectors.toList());System.out.println(list);}
}
结果:
代码如下(示例):[Student(id=1, stuNum=No1, name=小王), Student(id=2, stuNum=No2, name=小郭), Student(id=3, stuNum=No2, name=小高)]
[Student(id=1, stuNum=No1, name=小王), Student(id=2, stuNum=No2, name=小郭)]
总结
以上就是今天要讲的内容,本文仅仅简单介绍了stream过滤对象相同属性的使用,而Stream提供了大量的方法,可以看我的这个博客:http://t.csdnimg.cn/ARCK6