开发实践,怎么用Lambda进行list合并以及去重

2023-08-22 15:35:56 浏览数 (2)

在实际开发中可以使用Lambda表达式对两个List进行合并和去重操作。假设有两个List,分别为list1和list2,并且这两个List中存储的元素类型相同,那么您可以使用下面的Lambda表达式实现合并和去重的操作:

代码语言:javascript复制


List<Type> mergedList = Stream.concat(list1.stream(), list2.stream())

.distinct()

.collect(Collectors.toList());

上述代码中,使用了Stream.concat()方法将两个List进行合并,然后使用distinct()方法去重,最后使用collect()方法将结果转换为List类型。

注意,在使用distinct()方法时,需要确保Type类已经正确实现了equals()和hashCode()方法,这才能够正常去重。如果Type类没有正确实现这两个方法,那么可以使用它的某一个属性进行去重比较,例如:

代码语言:javascript复制


List<Type> mergedList = Stream.concat(list1.stream(), list2.stream())

.distinct()

.collect(Collectors.toList());

List<Type> mergedListWithDistinctName = mergedList.stream()

.collect(Collectors.toMap(Type::getName, Function.identity(), (existing, replacement) -> existing))

.values()

.stream()

.collect(Collectors.toList());

上述代码中,首先对mergedList进行去重,在这里我们使用默认的equals()和hashCode()方法;然后使用toMap()方法将List转换为一个Map,其中key是Type对象的name属性,value是Type对象本身;在这个过程中,使用了一个lambda表达式作为第二个参数,把Type对象映射为它本身;最后使用values()方法获取到Map中的所有value,然后再次使用stream()方法进行操作,使用默认的distinct()方法进行去重,最后使用collect()方法将结果转换为List类型。

0 人点赞