我下面有一个类,想删除包含同名的重复人,如何使用Java8 Lambda,预计列表包含下面的p1、p3。
public class Person {
public int id;
public String name;
public String city;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
import java.util.ArrayList;
import java.util.List;
public class Testing {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
Person p1 = new Person();
p1.setId(1);
p1.setName("Venkat");
p1.setCity("Bangalore");
Person p2 = new Person();
p2.setId(2);
p2.setName("Venkat");
p2.setCity("Bangalore");
Person p3 = new Person();
p3.setId(3);
p3.setName("Kumar");
p3.setCity("Chennai");
persons.add(p1);
persons.add(p2);
persons.add(p3);
}
}
List<Person> modified = pesrons.stream().collect(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(Person::getName)))).stream().collect(Collectors.toList());
这将返回基于名称的非重复列表。
您还可以根据Java 8中的属性从对象列表中删除重复项
List<Person> personsWithoutDuplicates = persons.stream()
.distinct()
.collect(Collectors.toList());
你可以过滤掉它们并生成一个唯一的集合
:
Set<Person> set = persons.stream()
.collect(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(Person::getName))));
甚至更好:
Set<String> namesAlreadySeen = new HashSet<>();
persons.removeIf(p -> !namesAlreadySeen.add(p.getName()));
实际上,我知道如何减少重复的,或者将分配给,但我有一个不同的问题。如何在Java8中使用stream或者可能是来解决以下智能方式的问题? 假设列表中有一个对象
问题内容: 我在Python中有一个列表列表: 我想从中删除重复的元素。如果这是正常列表,而不是我可以使用的列表set。但不幸的是,该列表不可散列,因此无法建立一组列表。只有元组。因此,我可以将所有列表转换为元组,然后使用set并返回列表。但这不是很快。 如何以最有效的方式做到这一点? 上面的结果应为: 我不在乎保留订单。 注意:这个问题很相似,但不是我所需要的。搜索了SO,但没有找到确切的重复项
问题内容: 如果想基于每个嵌套列表的第一个元素评估重复项,谁能提出一个好的解决方案从嵌套列表中删除重复项? 主列表如下所示: 如果已经在第一位置出现了另一个具有相同元素的列表,那么我想删除该列表并得到以下结果: 您可以建议一种算法来实现此目标吗? 问题答案: 您是否关心保留订单/删除了哪些重复项?如果不是,则: 会做的。如果您想保留订单并想保留第一个订单,则:
问题内容: 如果嵌套字典前面没有键,我现在可以删除重复项。我可以使用此功能的字典列表的一个示例是: 但是,我希望能够根据键和该词典中关联的所有值删除重复项。因此,如果内部有相同的键但值不同,则我不想删除它,但是如果有完整的副本,则将其删除。 我该怎么做呢?谢谢。 问题答案: 要从字典列表中删除重复项,请执行以下操作:
其中DataCord是一个类 并且调谐器应该是唯一的
问题内容: 数据库类型为PostGres 8.3。 如果我写了: 我有一些计数超过1的行。如何取出重复的行(我仍然希望每个行都保留1行,而不是+1行…我不想删除所有行。) 例子: 应该变成: 我找到的唯一答案是 在那里,但是我想知道是否可以在没有哈希列的情况下做到这一点。 警告 我没有具有唯一编号的PK,因此无法使用min(…)技术。PK是3个字段。 问题答案: 这是所有表都应具有主键的众多原因之