java 8 去重,如果某字段有值则保留该条数据
时间: 2023-05-03 22:05:47 浏览: 434
Java中List集合对象去重及按属性去重的8种方法
5星 · 资源好评率100%
在Java 8中,可以使用stream()和distinct()方法来去重。如果需要保留某些字段,则可以使用map()方法将流中的对象映射为特定的类型,通过指定一个Predicate来过滤出符合条件的数据并返回新的流,最后通过collect()方法将结果收集到一个List中。
例如,假设有一个数据集合,包含了多个User对象,每个User对象有id和name两个属性,需要去重并保留id不为null的数据:
List<User> userList = new ArrayList<>();
userList.add(new User("1", "Tom"));
userList.add(new User("2", "Jerry"));
userList.add(new User("1", "Mike"));
userList.add(new User(null, "John"));
List<User> distinctList = userList.stream()
.distinct()
.filter(user -> user.getId() != null)
.collect(Collectors.toList());
这个例子中,首先通过stream()方法将List转换为流,然后使用distinct()方法对流中的对象进行去重操作。接着使用filter()方法,过滤掉id为null的数据,最后通过collect()方法将过滤结果收集到新的List中。
需要注意的是,在User类中需要正确实现hashCode()和equals()方法,以便可以正确进行去重操作。另外,如果要保留某些字段,可以通过自定义一个新的对象来实现,这里的例子中就是新建了一个User类,只包含了id和name两个字段,用于去重和过滤操作。
阅读全文