首页 > 解决方案 > Java 8 - 限制第一个对象的流并转换为特定对象?

问题描述

早些时候我使用:

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).

我该如何实施?

标签: javalistjava-8java-stream

解决方案


您可以执行以下操作:

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在特定索引上使用 a,请使用skipand limit。不要忘记过滤List<Person> after 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()));

推荐阅读