Java 8可选列表

时间:2015-08-19 23:19:27

标签: java lambda java-8 java-stream

我正在努力实现以下目标: 给出一个对象列表。返回起始符合条件的5个对象。

我能够第一个元素:

optionServiceObject.map((p) -> (List<ServiceAttribute>) p.getFoor())
                   .flatMap((v2) -> v2.stream().filter((v3) -> v3.hasBar())
                   .map(v3 -> v3.getBar())
                   .findFirst()

但无法获得,如何将标准与标准匹配到列表中。

1 个答案:

答案 0 :(得分:2)

如果您想获得对象编号5,请使用skip(4)跳过前四个对象:

Optional<Bar> fifthObject = optionServiceObject
                    .map((p) -> (List<ServiceAttribute>) p.getFoor())
                    .flatMap((v2) -> v2.stream().filter((v3) -> v3.hasBar())
                    .map(v3 -> v3.getBar())
                    .skip(4)
                    .findFirst();

如果您的匹配对象少于5个,结果将为空。

如果您想获得最多5个匹配对象,请使用limit(5)并将结果收集到List

List<Bar> fiveObjects = optionServiceObject
                    .map((p) -> (List<ServiceAttribute>) p.getFoor())
                    .flatMap((v2) -> v2.stream().filter((v3) -> v3.hasBar())
                    .map(v3 -> v3.getBar())
                    .limit(5)
                    .collect(Collectors.toList());