stream流去除某个属性为空的元素
时间: 2023-05-23 11:01:49 浏览: 153
可以使用Java 8的stream过滤空元素:
List<Object> list = Arrays.asList("a", null, "b", null);
list.stream().filter(Objects::nonNull).forEach(System.out::println);
输出为:
a
b
如果是其他编程语言,相应的方法可能会有所不同,可以查阅该编程语言对应的API文档。
相关问题
stream流按照某个字段去重
可以使用Java 8中的流(Stream)和Collectors工具类来实现按照某个字段去重:
假设有一个Person类,有两个属性name和age,我们要按照name字段去重:
```java
public class Person {
private String name;
private int age;
// 省略getter和setter方法
}
```
可以使用以下代码:
```java
List<Person> persons = new ArrayList<>();
// 添加数据到persons
List<Person> distinctPersons = persons.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))),
ArrayList::new
));
```
这里使用了Collectors的collectingAndThen()方法,该方法可以将Collector转换为另一种类型。
首先使用toCollection()方法将流中元素收集到TreeSet中,通过传入Comparator.comparing()方法来指定按照哪个字段去重。然后再使用ArrayList::new将TreeSet转换为ArrayList,即去除Set中的重复元素后,将结果转换为List返回。
用Stream流处理重复数据,多种方式去重list,可整体去重或按某个属性去重
在Java中,可以使用Stream流来处理重复数据并进行去重操作。下面是几种常见的方式:
1. 使用distinct()方法:通过调用Stream的distinct()方法可以去除流中的重复元素。这种方式适用于整体去重,即不考虑对象的属性。
2. 使用equals()方法和distinct()方法:如果要按照对象的某个属性进行去重,可以先重写对象的equals()方法,然后再使用distinct()方法进行去重。在equals()方法中,需要根据指定的属性进行比较,如果属性相同则返回true,否则返回false。
3. 使用collect()方法和toSet()方法:通过调用Stream的collect()方法,并使用Collectors.toSet()方法可以将流中的元素收集到一个Set集合中,由于Set集合的特性是不允许重复元素的,所以可以实现去重的效果。这种方式适用于整体去重。
下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 25));
personList.add(new Person("Alice", 20));
personList.add(new Person("Charlie", 30));
// 整体去重
List<Person> distinctList = personList.stream().distinct().collect(Collectors.toList());
System.out.println("整体去重后的列表:" + distinctList);
// 按照姓名去重
List<Person> distinctByNameList = personList.stream().distinct().collect(Collectors.toList());
System.out.println("按照姓名去重后的列表:" + distinctByNameList);
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 重写equals()方法,只比较姓名
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return name.equals(person.name);
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
```
阅读全文