有一个实体类的集合1,里面有一个String类型的名为mac属性,还有一个mac的集合2,如何在集合1中剔除与集合2中mac重复的实体
时间: 2024-02-26 15:58:59 浏览: 54
list集合去除重复对象的实现
可以使用Java 8的Stream API和Lambda表达式来实现这个功能。可以按照以下步骤操作:
1. 定义一个Predicate函数,用于判断集合1中的实体是否在集合2中存在相同的mac属性:
```
Predicate<Entity> isDuplicate = e -> set2.stream().anyMatch(m -> m.equals(e.getMac()));
```
2. 使用Stream过滤出不重复的实体集合:
```
List<Entity> distinctEntities = list1.stream().filter(isDuplicate.negate()).collect(Collectors.toList());
```
其中,isDuplicate.negate()表示取反操作,即过滤出集合1中mac属性不在集合2中存在的实体。
完整代码示例:
```
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Entity> list1 = Arrays.asList(
new Entity("mac1"),
new Entity("mac2"),
new Entity("mac3")
);
Set<String> set2 = Set.of("mac2", "mac4");
Predicate<Entity> isDuplicate = e -> set2.stream().anyMatch(m -> m.equals(e.getMac()));
List<Entity> distinctEntities = list1.stream().filter(isDuplicate.negate()).collect(Collectors.toList());
System.out.println(distinctEntities);
}
}
class Entity {
private String mac;
public Entity(String mac) {
this.mac = mac;
}
public String getMac() {
return mac;
}
@Override
public String toString() {
return "Entity{" +
"mac='" + mac + '\'' +
'}';
}
}
```
输出结果:
```
[Entity{mac='mac1'}, Entity{mac='mac3'}]
```
阅读全文