资源说明: Java中List去重和Stream去重的解决方法
List去重是Java中的一种常见操作,对于List中的重复元素进行去重,从而使得List中的元素变得独一无二。 Java中提供了多种方法来实现List去重,下面我们将对其中的一些方法进行介绍。
使用HashSet去重
HashSet是一种常见的集合类型,它具有自动去重的特性。我们可以将List中的元素添加到HashSet中,然后从HashSet中取出元素,这样就可以实现List去重。下面是一个简单的示例代码:
```java
List users = Lists.newArrayList(
new User(1, "a"),
new User(1, "b"),
new User(2, "b"),
new User(1, "a")
);
Set set = new HashSet<>();
for (User user : users) {
set.add(user);
}
List result = new ArrayList<>(set);
```
重写hashCode和equals方法
在使用HashSet去重时,我们需要重写hashCode和equals方法,否则HashSet将无法正确地去重。下面是一个示例代码:
```java
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
User user = (User) o;
return Objects.equals(id, user.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
```
使用Stream去重
Java 8中引入了Stream API, Stream API提供了一个简单的方法来实现List去重。下面是一个示例代码:
```java
List users = Lists.newArrayList(
new User(1, "a"),
new User(1, "b"),
new User(2, "b"),
new User(1, "a")
);
List result = users.stream()
.distinct()
.collect(Collectors.toList());
```
手动去重
除了使用HashSet和Stream之外,我们也可以手动地实现List去重。下面是一个示例代码:
```java
List users = Lists.newArrayList(
new User(1, "a"),
new User(1, "b"),
new User(2, "b"),
new User(1, "a")
);
List result = new LinkedList<>();
for (User user : users) {
boolean b = result.stream().anyMatch(u -> u.getId().equals(user.getId()));
if (!b) {
result.add(user);
}
}
```
List去重是Java中的一种常见操作,我们可以使用HashSet、Stream或手动去重等方法来实现List去重,但无论哪种方法,我们都需要正确地重写hashCode和equals方法,以便正确地去重。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。