java - 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).
我该如何实施?
解决方案
您可以执行以下操作:
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,请使用skip
and 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()));
推荐阅读
- javascript - 如何从 JS 移植到 REACT
- ios - BLE 总是从 CBPeripheral 设备获取“状态 = 连接”
- sql-server - T-SQL MERGE:每个 GROUP BY 表达式必须至少包含一个不是外部引用的列
- flutter - Flutter 的 Jaguar 客户端
- python-3.x - 如何在自定义 keras 层上使用自定义激活
- api - 方法文件返回方法 Illuminate\Http\Response::file 不存在
- python - 要绘制的点不按顺序
- c - 原始类型声明如何在 C 中工作?
- python - 如何忽略根警告?
- django - 我如何在一个引导表 django 2.1 上填充我的数据