合并List <T>和List <Optional <T >> - java

鉴于:

    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…