Java 8 - 限制第一个对象的流并转换为特定对象?

标签 java list java-8 java-stream

之前我用过:

List<Person> person = UserDB.getUserDetails();
Person p = person.get(0); // index of first position 
System.out.println(p.getFirstName()); // sometime i am getting 
                                      // NULL pointer issue if person object is null

在 Java 8 中,我尝试使用 map(Person::new)。它导致了问题。

person.stream().limit(1).map(Person::new).

我该如何实现?

最佳答案

您可以执行以下操作:

person.stream()                                              // stream
      .findFirst()                                           // finds the first
      .ifPresent(i -> System.out.println(i.getFirstName())); // if present, print the name

如果您想使用 Person如果List<Person>为空,使用 Optional :

Optional<Person> p = person.stream().findFirst();
p.ifPresent(i -> System.out.println(i.getFirstName()));

此解决方案假定列表包含或不包含元素(为空)。但是,如果 null发生在 List<Person> , 你必须过滤 null值先出:

Optional<Person> p = person.stream().filter(Objects::nonNull).findFirst();
p.ifPresent(i -> System.out.println(i.getFirstName()));

最后,如果您想使用 Person在特定索引上,使用 skiplimit .不要忘记过滤 List<Person> skip-limit` 否则索引将不匹配:

// person.get(3)
Optional<Person> p = person.stream().skip(3).limit(1).filter(Objects::nonNull).findFirst();
p.ifPresent(i -> System.out.println(i.getName()));

关于Java 8 - 限制第一个对象的流并转换为特定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51839089/

相关文章:

python - 使用 *args 而不将参数放入元组中?

xml - 错误 : Could not find or load main class com. sun.tools.internal.xjc.XJCFacade

java - 为什么 <? extends Number> 不适用于 Integer?

java - 将 Java 通配符类型参数转换为 kotlin

python - 打印链接到列表中键的字典值

java.util.NoSuchElementException : No line found error java

java - 将 Java byte[].class 转换为 C#

java-8 - 为什么@FunctionalInterface 不能应用于 SAM 抽象基类

java - 同时运行 2 个增强的 for 循环

java - 使用Next按钮JAVA显示结果集中的每条记录