鉴于:
List<Integer> integers = new ArrayList<>(Arrays.asList(
10, 12
));
List<Optional<Integer>> optionalIntegers = Arrays.asList(
Optional.of(5),
Optional.empty(),
Optional.of(3),
Optional.of(2),
Optional.empty()
);
List<Integer> unwrappedOptionals = optionalIntegers.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
integers.addAll(unwrappedOptionals);
有没有更好的方法解开Optional
,或者将它们都合并到List<Integer>
中?在进行List
之前将它们收集到新的addAll()
中感觉非常浪费。
java参考方案
使用新的Java-9 Optional.stream()
方法,可以这样编写:
optionalIntegers.stream()
.flatMap(Optional::stream)
.forEach(integers::add);
在Java-9之前,您可以将这样的方法添加到您自己的实用程序类中:
public class StreamUtil {
public static <T> Stream<T> fromOptional(Optional<T> opt) {
return opt.isEmpty() ? Stream.empty() : Stream.of(opt.get());
}
}
并像这样使用它:
optionalIntegers.stream()
.flatMap(StreamUtil::fromOptional)
.forEach(integers::add);
实例化类型<?>的泛型类 - java我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。该示例代码实例化了两个通用集合:List<?> list = new ArrayList<?>(); List<? extends Object> list2 = new ArrayList<? extends Object>(); …
无法在Maven surefire中运行多个执行? - java我想运行名称以ResourceTest.java结尾的测试类,因此我在执行后定义了它们。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <co…
如何告诉Checker遗留方法将接受Nullable类型? - java考虑一下:@Nullable Object obj = null; Optional<Object> optional = Optional.ofNullable(obj); 这会失败,因为检查器框架假定ofNullable无法接受null值(毕竟,其参数未标记为@Nullable)。有没有办法告诉Checker-framework这个方法(或我…
展平地图中的列表列表 - java我有订单流(来源是订单列表)。每个订单都有一个客户和一个OrderLine列表。我要实现的目标是在一张简单的列表中以客户为关键的地图,并将属于该客户的所有订单行作为值。现在,通过执行以下操作,我现在管理的内容返回了Map<Customer>, List<Set<OrderLine>>>:orders .collect…
使用流处理异常 - java我有一个Map<String,List<String>>并希望它变成Map<String,List<Long>>,因为列表中的每个String都代表一个Long:Map<String,List<String>> input = ...; Map<String,List<Lon…