当前位置: 首页 > 知识库问答 >
问题:

Java 8流映射到列表

高鸿振
2023-03-14

假设我有一个函数,它接受两个参数并返回一个值,那么可以将映射转换为流中的列表作为非终端操作吗?我能找到的最近的方法是使用地图上的forEach创建实例并将其添加到预定义列表中,然后从该列表中启动一个新流。还是我错过了什么?

经典的“在一长串单词中找出3个最常出现的单词”

wordList.stream().collect(groupingBy(Function.identity, Collectors.counting))).

(现在我想流式处理该地图的入口集)

sorted((a,b) -> a.getValue().compareTo(b.getValue))).limit(3).forEach(print...

共有2个答案

华星驰
2023-03-14

您还可以使用以下技术将Hashmap条目转换为ArrayList,

ArrayList list = hashMap.values();
湛嘉歆
2023-03-14

您应该获取映射的入口集,并将这些条目粘附到二进制函数的调用中:

inputMap.entrySet().stream().map(e->myFun(e.getKey(),e.getValue()));

上面的结果是一个T实例流。

您的附加示例证实了下面评论中讨论的内容:按分组和排序是按其性质进行的终端操作。它们必须完全执行,才能产生输出的第一个元素,因此将它们作为非终端操作涉及并不能买到性能/内存占用方面的任何东西。

Java 8将排序后的定义为一个非终端操作,然而,这个决定可能会导致欺骗性代码,因为操作将阻塞,直到它接收到所有上游元素,并且在接收时必须保留它们。

 类似资料:
  • 我有map,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是:

  • 我在迭代一个对象内的列表时遇到了一个问题,该对象内嵌在另一个映射中。我的目标是迭代这个列表并生成一个映射 ,我希望使用streams和lamdas来实现这一点。 我在上面看到了,我需要通过迭代FolderBo中的elementList从elementBo创建一个带有map 的映射。folderBo本身就在Modelbo的地图内。

  • 我正在从文件中读取值并获取列表。如下- 一旦我得到这个

  • 我有一个问题与转换列表对象映射字符串,列表对象。我正在寻找与一个关键名称的汽车所有组件的地图,一个值由汽车与此组件表示 我写了一个解决方案,但寻找一个更好的流解决方案。

  • 我有映射键作为字符串和值作为列表。列表可以有10个唯一值。我需要转换这个映射键为整数和值为列表。示例如下: 输入: 2:“钥匙-1”,“钥匙-2” 3:“钥匙-1”、“钥匙-2”、“钥匙-3” 4:“钥匙-1”、“钥匙-2”、“钥匙-3”

  • 我有一个实体,看起来像这样: 输入数据是一个