【发布时间】:2016-07-23 21:35:12
【问题描述】:
我有这段代码:
public LatLng[] locationDtoListToLatLngArray(List<LocationDto> locationDtoList) {
return locationDtoList.stream()
.map(locationDto -> new LatLng(locationDto.getLatitude(), locationDto.getLongitude()))
.toArray(LatLng[]::new);
}
但如果locationDto 在.map 内是null,则会崩溃
我修复了它:
public LatLng[] locationDtoListToLatLngArray(List<LocationDto> locationDtoList) {
return locationDtoList.stream()
.map(locationDto -> locationDto == null ? null : new LatLng(locationDto.getLatitude(), locationDto.getLongitude()))
.toArray(LatLng[]::new);
}
但我想知道是否有更好的方法(不检查是否locationDto == null)
请注意,如果locationDto == null,我想保留null,所以过滤器不是一个选项:)
谢谢
编辑:我知道问题在于访问一个空对象,我只想知道是否有像 .map() 这样的函数,可以满足我的需要,.mapKeepingNulls(),类似的东西。
编辑 2:我最终这样做了:
public LatLng[] locationDtoListToLatLngArray(List<LocationDto> locationDtoList) {
return locationDtoList.stream()
.map(this::locationDtoToLatLng)
.toArray(LatLng[]::new);
}
private LatLng locationDtoToLatLng(LocationDto locationDto) {
if (locationDto == null) {
return null;
}
return new LatLng(locationDto.getLatitude(), locationDto.getLongitude());
}
【问题讨论】:
-
比检查
null更好的方法? -
附带的问题是:为什么
nulls 在列表的首位? (而且我认为没有更清洁的方法,除了将所有这些都包装在Optional中,这将适得其反 IMO)。 -
@SotiriosDelimanolis,是的,我认为这可能是一些功能,可以做我想做的事.. .mapKeepingNulls() 类似这样.. 我是新的流
标签: java lambda java-stream