我有两个狗列表 - dogsList1,dogsList2
我想创建一个具有唯一名称字段的所有狗的列表.
(意思是,如果我遇到第二只同名的狗,我不会将它添加到结果列表中)
这是我在java中可以做的最好的,但它收集了唯一的名称,而不是Dogs :(
Dog包含除名称之外的其他字段)
// collect all dogs names from first list
List<String> dogNames1 = dogsList1.stream()
.map(x -> x.getName()).collect(Collectors.toList());
dogList2.stream()
.filter(x->!dogNames1.contains(x.getName()))
.forEach( x->
dogsList1.add(x);
);
Run Code Online (Sandbox Code Playgroud)
可以改进吗?还有其他更好的解决方案或优化方法
给出以下示例类:
class Foo{
String name;
int value;
public Foo(String name, int value) {
this.name = name;
this.value = value;
}
// getters, setters, toString & equals
}
Run Code Online (Sandbox Code Playgroud)
和 foo 列表:
List<Foo> fooList = List.of(new Foo("A",1), new Foo("A",2),
new Foo("B",1),
new Foo("C",1),
new Foo("D",1), new Foo("D",2), new Foo("D",3)
);
Run Code Online (Sandbox Code Playgroud)
我想获得一份按名称区分的 foo 列表,如果有多个,Foos我想保留具有最高值的那个。
我发现这个java-8-distinct-by-property问题可以按名称获取不同列表的元素,它使用此方法来获取不同的元素:
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
fooList.stream().filter(distinctByKey(Foo::getName)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
它可以获取不同的元素,但如果有两个或多个同名元素,则保留列表中的第一个元素,并且我无法添加条件来保留具有最高值的元素。
另一种选择是使用分组依据:
Map<String,List<Foo>> …Run Code Online (Sandbox Code Playgroud) 嗨,我想在 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 做到这一点?
我试图从基于两个属性的对象列表中删除重复项,这个问题类似于下面的链接,但是我试图使用Java 8功能基于两个属性找到唯一性。
示例:我有一个自定义对象,其中两个属性一起构成唯一的条目
说列出客户
customerName和DOB一起进行唯一输入。
使用两个属性的谓词来识别区别的任何解决方案。像下面的链接,他们对一个属性有解决方案。 Java 8按属性区分
类似的问题: