有一个可选的可选列表,比如:
Optional<List<Optional<String>>> optionalList = Optional.of(
Arrays.asList(
Optional.empty(),
Optional.of("ONE"),
Optional.of("TWO")));
如何遍历选项列表
打印字符串的一个
和两个
?
有一个可选的可选流怎么样?
Optional<Stream<Optional<String>>> optionalStream = Optional.of(
Stream.of(
Optional.empty(),
Optional.of("ONE"),
Optional.of("TWO")));
更新:感谢您的答案,optionalStream(非嵌套)的解决方案:
optionalStream
.orElseGet(Stream::empty)
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println);
您确实可以流式处理选项
Optional<List<Optional<String>>> optionalList = Optional.of(Arrays.asList(Optional.empty(), Optional.of("ONE"), Optional.of("TWO")));
optionalList.orElseGet(ArrayList::new)
.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println);
您也可以使用
Optional.ifPresent()
,如其他答案所建议的:
optionalList.ifPresent(l -> l.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println));
就我个人而言,我更喜欢第一种方式,因为它删除了嵌套的级别:我发现它更容易阅读。
如果您可以使用Java 9,可以这样做:
optionalList.ifPresent(list -> list.stream()
.flatMap(Optional::stream)
.forEach(System.out::println));
对于选项流,它将是相同的,没有第一个。stream()
调用。
对于Java8,您没有可用的可选::流
方法,因此您可以自己执行:
optionalList.ifPresent(list -> list.stream()
.flatMap(opt -> opt.map(Stream::of).orElseGet(Stream::empty))
.forEach(System.out::println));
对于可选
的Stream
,它看起来像这样:
optionalStream.ifPresent(stream -> stream
.flatMap(opt -> opt.map(Stream::of).orElseGet(Stream::empty))
.forEach(System.out::println));
首先,检查可选
是否存在。如果是,则流式传输列表,过滤非空列表并打印每个列表。
optionalList.ifPresent(list -> list.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println));
流的情况也差不多
optionalStream.ifPresent(stream -> stream
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println));
我有一个项目数组,每个项目都有一个天数。每天都会有多个项目,但我想动态构建一个包含每天列的表。这是我到目前为止的代码。 显然,这会为每个项目生成一个新列,而不管当天是否已经看到了前一个项目。我希望它跳过制作一个新的列,如果该列已经存在的一天,并创建一个如果它不存在。 我该怎么办?
问题内容: 我有一个这样的清单清单。 现在,我需要遍历上面的列表并输出一个字符串列表,如下所示(原始列表中没有数字) 问题答案: 准确执行您指定的操作的最简单解决方案是: 这基本上等效于迭代版本: 但是,这并不是遍历具有任意维数的多维列表的通用方法,因为嵌套列表推导/嵌套的for循环可能很难看。但是,对于2或3维列表,您应该放心。 如果您确实决定需要平整3个以上的尺寸,我建议实现一个递归遍历函数,
我有一张自助表 我想做的是,当用户选中任何复选框时,在“选择”数据字段中,更改标题和描述的外观,例如,删除/斜体。我想使用这个“复选框”给用户一个直观的指示,一旦用户单击,这些行将从数据库中删除,一个单独的“删除”按钮。 提前感谢。
想改进这个问题吗 通过编辑这篇文章,更新问题,以便用事实和引用来回答。 我说的是一个人的名单。我必须遍历此列表才能找到id为X的人,如果找到,我必须更新该人的某些属性: 这段代码对我来说很有用,但我不确定这是为了实现什么,我正在使用它。映射我并不真正需要的返回值,所以我想知道是否有更好的方法来实现这一点?
我有一个产品集合,每个产品都会有: 价格 属性(例如:大小:xl,s,xxl;颜色:黄,红,蓝;....) 制造商 类别(一个产品可以有多个类别) 此集合在ElasticSearch中索引。现在,当我查询类别A中所有产品的列表时,我还希望获得: 所有产品的价格范围(最小-最大) 所有可能选项和值的列表(大小、颜色和相应的值xl、s、xxl、Yellog、red、blue) 制造商(耐克、阿迪达斯、
输入是一个列表列表。请看下面。文件名是一个列表,包含的名称与列表中的列表数量相同(,,) 每个名称都附加到路径中:-- 程序在遍历列表时遍历包含路径的列表,并打印路径及其文件名。我希望输出是--。然而,我得到了下面的输出。请查看输入后的输出 输入 输出 我希望输出是-- 然而,我得到的结果如下: 我无法理解为什么在遍历列表时不能使用文件名遍历路径列表。我希望这有助于澄清问题。有人能帮忙吗? 我已经