gpt4 book ai didi

java - 将列表转换为 map - foreach 还是流?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:44 24 4
gpt4 key购买 nike

我想转换一个 List<String>进入Map<String, Integer> .列表的值应该作为键,映射值将被静态初始化。

我想保持列表的顺序,因此使用 LinkedHashMap , 并忽略重复项。

问题:使用 java8 stream 有什么优势吗?应用程序接口(interface)?因为,比较以下内容,仅就语法而言,我永远不会选择冗长的流 api,而是始终坚持旧的 foreach循环:

    //foreach
Map<String, Integer> map = new LinkedHashMap<>();
for (String k : abk) {
if (k != null) map.put(k, STATIC_VAL);
}

//streams
Map<String, Integer> map2 = abk.stream()
.filter(Objects::nonNull)
.collect(Collectors.toMap(
Function.identity(),
k -> STATIC_VAL,
(v1, v2) -> v1,
LinkedHashMap::new));

您会坚持旧方法还是使用新的 lambda 表达式?

最佳答案

对于这种简单的情况, 会坚持使用 for 循环。顺便说一句,它也更快(除了更具可读性之外),Stream 确实有必须使用的基础设施成本。这个新的 API 只是一个工具,每个工具都有优缺点。

一般来说,我倾向于仅在必须时才使用流 api - 比方说 List 需要过滤或映射到其他东西,等等 - 那么流的使用就有意义了。如果有多个操作必须完成,这将使代码更具可读性,然后用循环做同样的事情;但情况并非总是如此 - 如您的示例所示。

并行化(如果你真的需要它是另一个方面)。简单的 for 循环不容易并行化,但对于流来说这是轻而易举的事。

关于java - 将列表转换为 map - foreach 还是流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44944635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com