java - 如何使用 Java 8 Stream 从某些类属性中获取列表?

标签 java collections java-8 java-stream

我有一个 List<Person> .我需要获得 List来自 Person 的属性(property).

例如,我有一个 Person类:

class Person
{
    private String name;
    private String birthDate;
    public String getName() {
        return name;
    }
    public String getBirthDate() {
        return birthDate; 
    }
    Person(String name) {
        this.name = name;
    }
}

List<Person> personList = new ArrayList<>();
personList.add(new Person("David"));
personList.add(new Person("Joe"));
personList.add(new Person("Michel"));
personList.add(new Person("Barak"));

我想获取带有 Stream 的名称列表API,像这样:

List<String> names = personList.stream().somecode().collect(Collectors.toList());
names.stream().forEach(System.out::println);

#David
#Joe
#Michel
#Barak

此代码不起作用:

public class Main 
{
    public static void main(String[] args) 
    {
        List<Person> personList = new ArrayList<>();
        Person person = new Person("Иван");
        person.getFriends().addAll(Arrays.asList("Друг 1", "Друг 2", "Друг 3"));
        personList.add(person);
        person = new Person("Федор");
        person.getFriends().addAll(Arrays.asList("Друг 4", "Друг 5", "Друг 6"));
        personList.add(person);
        person = new Person("Алексей");
        person.getFriends().addAll(Arrays.asList("Друг 7", "Друг 8", "Друг 9"));
        personList.add(person);
        person = new Person("Константин");
        person.getFriends().addAll(Arrays.asList("Друг 10", "Друг 11", "Друг 12"));

        List<String> friens = personList.stream().map(e->e.getFriends()).collect(Collectors.toList());

        friends.stream().forEach(System.out::println);
        //Друг 1
        //Друг 2
        //Друг 3
        //Друг 4
        //...

    }
}

class Person
{
    String name;
    List<String> friends;

    Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public List<String> getFriends() {
        return friends;
    }
}


我怎样才能得到 List Stream 的属性应用程序接口(interface)?

最佳答案

你可以使用 map :

List<String> names = 
    personList.stream()
              .map(Person::getName)
              .collect(Collectors.toList());

编辑:

为了合并好友名列表,需要使用flatMap:

List<String> friendNames = 
    personList.stream()
              .flatMap(e->e.getFriends().stream())
              .collect(Collectors.toList());

关于java - 如何使用 Java 8 Stream 从某些类属性中获取列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30611870/

相关文章:

java - 无法弄清楚为什么我不断收到 com.mongodb.MongoSocketReadException : Prematurely reached end of stream

java - 启动Android需要一些指导

java - 更改线程的目标核心

oracle - 我可以实现 Openjdk 并创建一个可再分发的新 JDK 吗?,而不通过 tck 或任何特殊许可的测试?

java - 类型 Stream<List<Integer>> 中的方法 max(Comparator<? super List<Integer>>) 不适用于参数 (Comparator<Integer>)

java - Maven 没有用我的 jdk 打包项目

java - 对 ArrayList 内的原始数组进行索引 - Java

Java:用于保存不同类型基元的通用集合

C# 集合?

java - Java 8 中的 PriorityBlockingQueue 流乱序