Java8 Stream String List 转 对象 List
在Java中,List是常用的数据结构之一,用于存储一组对象。有时候,我们需要将一个String类型的List转换为一个对象类型的List。在Java8中,引入了Stream API,使得这样的转换变得非常简洁和高效。
Stream API简介
Stream API是Java8中引入的一种新的处理集合数据的方式。它提供了一种流水线的方式来处理集合元素,可以进行过滤、映射、排序、归约等操作。通过使用Stream API,我们可以实现更加优雅的代码,提高代码的可读性和可维护性。
示例场景
假设我们有一个String类型的List,每个String代表一个人的姓名。我们希望将这个List转换为一个对象类型的List,每个对象包含一个人的姓名和年龄。以下是示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
List<Person> persons = names.stream()
.map(name -> new Person(name, getAgeByName(name)))
.collect(Collectors.toList());
persons.forEach(System.out::println);
}
private static int getAgeByName(String name) {
// 根据姓名查询年龄的逻辑
// 这里使用简单的示例,直接返回固定的年龄
return 30;
}
static 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 String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
在上面的代码中,我们首先创建了一个String类型的List,然后使用Stream API的map
和collect
方法将其转换为一个Person类型的List。在map
方法中,我们通过匿名函数将每一个String元素转换为一个Person对象,其中包含了姓名和年龄。collect
方法将Stream转换为List。
最后,我们通过forEach
方法遍历Person列表,并将其打印出来。
关系图
下面是一个简单的关系图,展示了String类型的List和Person类型的List的关系。
erDiagram
List[String] ||..o{ Person : contains
在关系图中,我们可以看到List[String]和Person之间的关系,表明List[String]包含了Person对象。
总结
使用Java8的Stream API,我们可以非常方便地将String类型的List转换为对象类型的List。通过使用map
操作,我们可以将每一个String元素转换为一个Person对象,再通过collect
方法将Stream转换为List。这种转换方式不仅简洁高效,而且代码可读性也很高。
希望本文能够帮助你理解Java8中Stream的使用方法,并在实际开发中提高代码的质量和效率。
参考资料:
[Java 8 Stream API Tutorial](