java之stream对象去重
时间: 2023-07-02 09:18:39 浏览: 67
Java中的Stream对象也可以通过使用`distinct()`方法进行去重操作。与上面提到的对集合进行去重的方法类似,使用`distinct()`方法会返回一个去重后的Stream对象。
以下是一个示例代码:
```java
List<Integer> list = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
Stream<Integer> stream = list.stream();
Stream<Integer> distinctStream = stream.distinct();
```
这里的`distinctStream`就是去重后的Stream对象。需要注意的是,`distinct()`方法会根据元素的`equals()`方法进行比较,因此需要保证元素正确实现了`equals()`方法。
相关问题
java stream 去重 对象
以下是使用Java Stream进行对象去重的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建一个包含重复对象的List
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 25));
personList.add(new Person("Bob", 30));
personList.add(new Person("Alice", 25));
personList.add(new Person("Charlie", 35));
// 使用Stream的distinct方法进行对象去重
List<Person> distinctPersonList = personList.stream()
.distinct()
.collect(Collectors.toList());
// 输出去重后的结果
for (Person person : distinctPersonList) {
System.out.println(person.getName() + " - " + person.getAge());
}
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
}
```
这段代码创建了一个包含重复对象的List,并使用Stream的distinct方法对对象进行去重。在Person类中,我们重写了equals和hashCode方法,以便Stream能够正确识别重复的对象。最后,我们将去重后的结果输出到控制台。
java8 stream 属性去重
对于Java 8的Stream属性去重,你可以使用distinct()方法来实现。distinct()方法返回一个去重后的Stream,它根据元素的hashCode()和equals()方法来判断是否重复。
下面是一个示例代码,演示了如何在Stream中去重属性:
```java
List<Person> persons = Arrays.asList(
new Person("John", 25),
new Person("Alice", 30),
new Person("John", 25),
new Person("Bob", 35)
);
List<Person> distinctPersons = persons.stream()
.distinct()
.collect(Collectors.toList());
distinctPersons.forEach(System.out::println);
```
在这个例子中,Person类有name和age两个属性。使用distinct()方法可以去除相同的Person对象,保留唯一的对象。请确保Person类正确地实现了hashCode()和equals()方法。