我正在寻找一种使用StreamEx库只传输非空Optional
条目的优雅方法。或者标准库,如果可能的话。
目前我正在使用以下相当冗长的方法:
List<Optional<String>> list =
Arrays.asList(Optional.of("A"), Optional.empty(), Optional.of("B"));
List<String> nonEmpty =
StreamEx.of(list).filter(Optional::isPresent).map(Optional::get).toList();
我基本上在寻找类似StreamEx的nonNull
方法,但适用于Optional
。
答案 0 :(得分:5)
这已添加,但仅限于java-9:
<Data> void f(Class<Data> param ){
printStaticFieldIfPresent( param, "Base" );
printStaticFieldIfPresent( param, "First" );
printStaticFieldIfPresent( param, "Second" );
}
void printStaticFieldIfPresent( Class<?> c, String fieldName ) {
try {
System.out.println(c.getField(fieldName).get(null));
} catch( NoSuchFieldException e) {
//ignore or log
}
}
Stuart Marks here
有一个后端口答案 1 :(得分:2)
对StreamEx问题积压的一些研究显示issue 49,它提供了一种更短的方法,并包含对该主题的讨论:
List<String> nonEmpty = StreamEx.of(list).flatMap(StreamEx::of).toList();
更短,虽然它是否更具可读性尚待讨论。