之前我用过:
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
在特定索引上,使用 skip
和 limit
.不要忘记过滤 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/