栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Lambda表达式.reduce()方法减少给定列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Lambda表达式.reduce()方法减少给定列表

您对减排的理解是错误的。

reduce
将对所有元素重复应用一个函数以获得 单个结果

您似乎想像做还原

1, 2, 3, 5, 6, 8, 9, 10│  │  │  │  │  │  │  │└op┘  └op┘  └op┘  └op┘  │     │     │     │    result list

实际上,它确实

1, 2, 3, 5, 6, 8, 9, 10│  │  │  │  │  │  │  │└op┘  └op┘  └op┘  └op┘  │    │      │    │  └─op─┘      └─op─┘     │          │     └────op────┘│   final result value

尽管这是一个概念视图,但操作的确切顺序尚未指定。顺序执行将类似于

(((1 op 2) op 3) op4)…
并行执行,而并行执行将类似于上面的树之类的执行和部分顺序执行。


reduce
如果先将每个元素转换为a
List
,然后使用将每个列表连接起来的list操作,则可能会滥用结果列表。但是,这样做有两个问题:

  • 它没有提供所需的“跳过(原始列表的)第二个元素”逻辑;如果您看一下上面的树,应该清楚,不可能制定出
    op
    在每种可能的执行方案中都能做到的正确函数
  • 创建临时列表并将其连接起来效率很低

可以通过使用来解决后一点

collect
,这是 可变的
减少,因此,允许您使用可以在其中添加项目的可变列表,但是,它不能解决第一点,包括所需的过滤器将违反合同,并且仅按顺序执行工作。

因此,解决方案是为

filter
源列表范围内的所有元素定义一个,然后使用进行可变归约以创建结果列表
collect
,这很奇怪,这正是您的原始代码所做的:

… .filter(integer -> integer % 2 == 0).collect(Collectors.toList());


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498433.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号