【问题标题】:How can I get multiple properties from a Java POJO using the Java 8 Stream API?如何使用 Java 8 Stream API 从 Java POJO 获取多个属性?
【发布时间】:2017-05-29 15:15:58
【问题描述】:

鉴于这个类是用 Java 8 风格编写的,我想看看我是否不需要调用两次流 api:

import java.util.*;

public class Foo {

public static void main(String... args) {
    List<Person> persons = new ArrayList<>();
    init(persons, Person::new, "John", "Doe");


    persons.stream()
           .map(Person::getFirstName)
           .forEach(System.out::println);

    persons.stream()
           .map(Person::getLastName)
           .forEach(System.out::println);
}

@FunctionalInterface
interface PersonFactory {
    Person create(String firstName, String lastName);
}

private static void init(List<Person> persons, PersonFactory factory, String fn, String ln) {
    persons.add(factory.create(fn, ln));
}

}

class Person {
    private final String firstName;
    private final String lastName;

    public Person(String fName, String lName) {
        this.firstName = fName;
        this.lastName = lName;
    }

    public String getFirstName() {return this.firstName;}
    public String getLastName() {return this.lastName;}
}

我想看看我是否可以一口气代替stream 的“人”List

有什么建议吗?

【问题讨论】:

  • 我不明白你的用例。如果你需要遍历列表的所有元素,只需要使用List.forEach,你甚至不需要一个流。当您需要过滤列表的某些元素或对列表的元素进行一些转换时,流很有用,即将名称以A 开头的每个人转换为Frog,然后将它们收集到单独的列表中.

标签: java-8


【解决方案1】:

如果你不需要将对象转换为另一个,你可以试试这个

persons.forEach(i -> System.out.println(i.getFirstName() + " " + i.getLastName()));

【讨论】:

    【解决方案2】:

    我认为这可能对您使用 Map 有所帮助

    Map<String, String> mapp = persons.stream().collect(HashMap::new,
      (m, c) ->{
               m.put(c.getFirstname(), "");
               m.put(c.getLastname(), "");
      },HashMap::putAll);
    
    System.out.println(mapp.keySet().toString());
    

    【讨论】:

      猜你喜欢
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2014-06-15
      • 2019-06-14
      相关资源
      最近更新 更多