JAVA steam 过滤 获取新对象
时间: 2024-12-04 10:23:26 浏览: 1
在Java中,"Steam"通常是指Stream API,这是Java 8及以上版本引入的一个强大的特性,用于处理集合数据流。如果你想过滤并获取新的对象,你可以使用`filter()`函数结合`map()`函数。
例如,如果你有一个`List<Person>`,其中包含一些`Person`对象,并且你想过滤出年龄大于18岁的,可以这样做:
```java
List<Person> people = ... // 初始化你的人员列表
List<Person> adults = people.stream() // 转换成流
.filter(person -> person.getAge() > 18) // 过滤条件,只保留年龄大于18的
.map(Person::new) // 如果需要的话,映射每个符合条件的对象为一个新的实例
.collect(Collectors.toList()); // 收集结果到新的列表
// 现在adults列表只包含年龄大于18岁的人
```
这里假设`Person`类有一个名为`getAge()`的方法返回年龄。`map(Person::new)`是用来创建新实例的,如果不需要创建新的对象,可以直接去掉这行。
相关问题
java 8 steam 对象转map
在Java 8中,可以使用Stream API将对象列表转换为Map。下面是一个示例代码:
假设我们有一个Person类:
```
public class Person {
private String name;
private int age;
// getters and setters
}
```
现在我们有一个Person对象的列表,我们想将它们转换为一个Map,其中键是名称,值是年龄。
```
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35)
);
Map<String, Integer> map = people.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
System.out.println(map);
```
输出结果为:
```
{Bob=30, Charlie=35, Alice=25}
```
在上面的代码中,我们使用`Collectors.toMap()`方法将流中的元素转换为Map。该方法接受两个Function作为参数,一个用于提取键,另一个用于提取值。在这个例子中,我们使用Person对象的getName()和getAge()方法作为键和值。
需要注意的是,如果列表中存在重复的键,则会抛出IllegalStateException异常。为了解决这个问题,我们可以向`Collectors.toMap()`方法传递一个合并函数,例如:
```
Map<String, Integer> map = people.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge, (age1, age2) -> age1));
```
在这个例子中,我们传递了一个合并函数,它简单地选择第一个年龄。
java的steam流根据对象的属性去重
Java的Stream流可以根据对象的属性进行去重操作。你可以使用`distinct()`方法结合自定义的`equals()`和`hashCode()`方法来实现。以下是一个示例代码:
假设有一个`Person`类,包含`name`和`age`两个属性:
```java
class Person {
private String name;
private int age;
// 构造函数、getter和setter方法等省略
@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 && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
然后,我们有一个包含多个`Person`对象的集合,我们想根据`name`属性进行去重:
```java
List<Person> personList = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 25)
);
List<Person> distinctPersonList = personList.stream()
.distinct()
.collect(Collectors.toList());
```
上述代码将`personList`转换成Stream流,然后使用`distinct()`方法对流进行去重操作,最后通过`collect()`方法将去重后的结果收集到一个新的List中。
在`Person`类中,我们重写了`equals()`和`hashCode()`方法,根据`name`和`age`两个属性进行判断对象是否相等。这样,通过`distinct()`方法就可以根据`name`属性进行去重了。
阅读全文