stream流将object转对象
时间: 2024-10-09 11:08:40 浏览: 18
Stream API是Java 8引入的一种强大的数据处理机制,它允许对集合数据进行并行或非阻塞的操作。当涉及到从一个Object集合转换到另一个Object集合时,Stream可以提供一种高效、简洁的方式。例如,你可以使用map()函数将每个元素映射成一个新的对象,filter()用于过滤出满足条件的对象,thenApply()或thenCollect()则可以将流转换为最终的结果。
假设你有一个Person列表,你想根据年龄筛选并转换为Student对象,可以这样做:
```java
List<Person> people = ...;
List<Student> students = people.stream()
.filter(person -> person.getAge() >= 18) // 过滤条件
.map(Person::newToStudent) // 将Person转换为Student,这里假设有个newToStudent方法
.collect(Collectors.toList()); // 转换并收集结果
```
在这个例子中,`people.stream()`创建了一个Person对象的Stream,然后通过链式调用操作符一步步实现了转换。
相关问题
Stream流收集Object集合内对象中的字符串集合到一个集合内
可以使用 Java 8 的 Stream API,具体代码如下:
List<Object> objectList = new ArrayList<>(Arrays.asList("Hello", 123, "World", true));
List<String> stringList = objectList.stream()
.filter(obj -> obj instanceof String)
.map(String::valueOf)
.collect(Collectors.toList());
这段代码会将 objectList 中所有的字符串提取出来,放入一个新的 stringList 中。
Stream流实现Object与map相互转化
可以通过Java 8中的Stream API实现Object与Map相互转换,具体步骤如下:
将Object转换为Map:
1. 首先需要获取该Object的所有字段,可以通过反射实现,如下:
```
Field[] fields = obj.getClass().getDeclaredFields();
```
2. 然后通过Stream将字段转换为Map,如下:
```
Map<String, Object> map = Arrays.stream(fields)
.peek(field -> field.setAccessible(true))
.collect(Collectors.toMap(Field::getName, field -> {
try {
return field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}));
```
将Map转换为Object:
1. 首先需要获取该Object的Class对象,如下:
```
Class clazz = obj.getClass();
```
2. 然后通过Stream将Map中的键值对转换为Object的字段,如下:
```
map.forEach((key, value) -> {
try {
Field field = clazz.getDeclaredField(key);
field.setAccessible(true);
field.set(obj, value);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
});
```
完整代码如下:
```
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class ObjectMapConverter {
public static Map<String, Object> objectToMap(Object obj) {
Field[] fields = obj.getClass().getDeclaredFields();
Map<String, Object> map = Arrays.stream(fields)
.peek(field -> field.setAccessible(true))
.collect(Collectors.toMap(Field::getName, field -> {
try {
return field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}));
return map;
}
public static void mapToObject(Map<String, Object> map, Object obj) {
Class clazz = obj.getClass();
map.forEach((key, value) -> {
try {
Field field = clazz.getDeclaredField(key);
field.setAccessible(true);
field.set(obj, value);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
});
}
public static void main(String[] args) {
Person person = new Person("Tom", 20);
Map<String, Object> map = objectToMap(person);
System.out.println(map);
Person newPerson = new Person();
mapToObject(map, newPerson);
System.out.println(newPerson);
}
}
class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
```
阅读全文