嗨,我想在 java 中使用 lambda 来删除列表中的重复元素。定义是否重复将通过自定义函数让我们假设我们有这些对象:
Object1(id:1 , name:"SEVERO" , grade:"A")
Object2(id:2 , name:"SEVERO" , grade:"B")
Object3(id:3 , name:"LUCY" , grade:"A")
Object4(id:4 , name:"LUCY" , grade:"A")
Object5(id:5 , name:"PAULA" , grade:"A")
Run Code Online (Sandbox Code Playgroud)
预期成绩:
Object2(id:2 , name:"SEVERO" , grade:"B")
Object3(id:3 , name:"LUCY" , grade:"A")
Object5(id:5 , name:"PAULA" , grade:"A")
Run Code Online (Sandbox Code Playgroud)
所以基本上如果有同名的对象,我只想保留其中一个。将保留的是等级最高的那个(等级顺序:A->B->C),如果等级有平局,任何物品都可以保留,没有偏好.
我如何使用 java lambda 做到这一点?
我会和toMap收藏家一起去:
Collection<Student> result = source.stream()
.collect(toMap(Student::getName, Function.identity(),
BinaryOperator.minBy(Comparator.comparing(Student::getGrade))))
.values();
Run Code Online (Sandbox Code Playgroud)
source 是我们正在流式传输的集合。Student 是源中的对象(当然这只是一个假设,您应该将其更改为集合中对象的名称)。Student::getName 是用于提取地图键的 keyMapper。Function.identity() 是用于提取地图值的 valueMapper。BinaryOperator.minBy(Comparator.comparing(Student::getGrade)) 是用于在两个给定对象具有相同名称的情况下解决冲突的合并函数。values 生成地图的值,因为我们不再关心键。如果你想要一个List<T>而不是一个,Collection<T>那么可以随意将上述管道的结果传递给ArrayList<>(...)构造函数。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |