java8根据某一属性过滤去重的实例

网友投稿 447 2022-07-31


目录java8根据某一属性过滤去重根据list某一属性去重过滤StudentExamState=0的数据过滤ExamRoomStudentCount=0的数据Java8 stream根据对象字段去重stream对list中的对象进行去重

java8根据某一属性过滤去重

最近刚接触到java8特性,在不知道有java8特性的时候,一个for循环套一个for循环,自从接触大java8,为自己省了很多事,节省了很多代码量.

根据list某一属性去重

//根据id去重

examRoomModelLists = examRoomModelLists.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(

// 利用 TreeSet 的排序去重构造函数来达到去重元素的目的

// 根据firstName去重

() -> new TreeSet<>(Comparator.comparing(ExamRoomModel::getId))), ArrayList::new));

过滤StudentExamState=0的数据

em.setNoLoginExamineeCount((examinee.stream().map(ExamineeEntity::getStudentExamState).filter(x ->

x == 0).collect(Collectors.toList())).size());

}

过滤ExamRoomStudentCount=0的数据

List filterList = examRoomModelLists.stream().filter(ExamRoomModel ->

!Objects.equals(ExamRoomModel.getExamRoomStudentCount(), 0)).collect(Collectors.toList());

是不是很方便,换成以前过滤去重不知道要写多少横代码,现在一行解决.

Java8 stream根据对象字段去重

public class Java8StreamTest {

public static class Book{

private String id;

private String name;

public Book(String id, String name) {

thistohWqFPB.id = id;

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@OtohWqFPBverride

public String toString() {

return "Book{http://" +

"id='" + id + '\'' +

", name='" + name + '\'' +

'}';

}

}

@Test

public void testUnique(){

List books = Lists.newArrayList(new Book("1","1"),new Book("2","2"),new Book("3","3"),new Book("2","2"));

//使用TreeSet去重

List unique1 = books.stream().collect(

collectingAndThen(toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId()))),

ArrayList::new));

System.out.println(unique1);

//使用map去重

List unique2 = books.stream()

.filter(distinctByKey(o -> o.getId()))

.collect(Collectors.toList());

System.out.println(unique2);

}

public static Predicate distinctByKey(Function super T, Object> keyExtractor) {

Map seen = new ConcurrentHashMap<>();

System.out.println("这个函数将应用到每一个item");

return t -> seetohWqFPBn.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;

}

}

stream对list中的对象进行去重

首先我们有一个对象属性如下

@Data

public class Person {

private String id;

private String name;

private String sex;

}

我们根据属性name来去重,去重代码如下

List persons = new ArrayList();

//赋值初始化过程省略

List uniqueByName = persons.stream().collect(

Collectors.collectingAndThen(

Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new)

);

根据name,sex两个属性去重

List persons = new ArrayList();

//赋值初始化过程省略

List uniqueByNameAndSex = persons.stream().collect(

Collectors. collectingAndThen(

Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getName() + ";" + o.getSex()))), ArrayList::new)

);


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java8 Stream流根据多个字段去重
下一篇:java8如何根据list对象中的属性过滤筛选
相关文章

 发表评论

暂时没有评论,来抢沙发吧~