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

用于索引映射的 Java 流列表

羊舌兴德
2023-03-14

如何从字符串列表中获取映射,其中索引是键,字符串是值?

如果我有这样的名单

List<String> list = List.of("foo","bar","baz","doo");

我想要一张< code >地图

{0=foo, 1=bar, 2=baz, 3=doo}

当我执行以下操作时,我得到一个错误

static Map<Integer,String> mapToIndex(List<String> list) {
    return IntStream.range(0, list.size())
            .collect(Collectors.toMap(Function.identity(), i -> list.get(i)));
}

错误

所需类型:int提供:Object

当我将其转换为int或Integer时

static Map<Integer,String> mapToIndex(List<String> list) {
    return IntStream.range(0, list.size())
            .collect(Collectors.toMap(Function.identity(), i -> list.get((Integer) i)));
}

我明白了

收集(java.util.function.Supplierjava.util.function.ObjIntConsumerjava.util.function.BiConsumer

我错过了什么?

共有2个答案

郭浩穰
2023-03-14

只需添加装箱即可将ints转换为整数s

java prettyprint-override">IntStream.range(0, list.size())
         .boxed()
         .collect(Collectors.toMap(Function.identity(), i -> list.get(i)));
居琛
2023-03-14

< code>IntStream没有以< code>Collector为参数的< code>collect()方法,因此您必须使用< code>boxed()将其转换为< code >流

static Map<Integer, String> mapToIndex(List<String> list) {
    return IntStream.range(0, list.size()).boxed().collect(Collectors.toMap(Function.identity(), list::get));
}
 类似资料:
  • 我有一个实体,看起来像这样: 输入数据是一个

  • 我正在尝试学习如何使用Java 8的集合,我想知道是否有一种方法将我的列表转换成一个地图使用Java流。 我想知道如何使用流将上面的列表创建到一个映射中。我知道如何将foreach etc与puts一起使用,但我只是想知道是否有更优雅的方法使用流构建映射。(我知道下面的语法不正确,我是流的新手,不知道怎么写) 目标是代表以下内容。

  • 问题内容: 有一个字符串列表,我需要构造一个有效地成对的对象列表。目前,我有这样的代码使用谷歌收藏: 我想使用Java 8流来做到这一点。如果没有索引,我可以这样做: 要获取索引,我将必须执行以下操作: 但是,文档说映射功能应该是无状态的,但实际上是其状态。 有没有办法将顺序流的元素映射到它们在流中的位置? 问题答案: 您可以执行以下操作: 但是,根据列表的基础实现,它可能效率不高。您可以从中获取

  • 我有这个简单的Bean类: 在我的主类中,我在列表中添加了一些信息: 现在我想将图书列表转换为以下形式的地图: 因此,输出(上面的地图)如下所示: 因此,我需要按isbn作为关键字和作者作为值对条目进行分组。一个isbn可以有多个作者。 我尝试如下: 不能更改bean的格式。如果bean有字符串值而不是map,我可以这样做,但是要坚持使用map。 我已经写了传统的java 6/7方式来正确地做这件

  • 假设我有一个函数,它接受两个参数并返回一个值,那么可以将映射转换为流中的列表作为非终端操作吗?我能找到的最近的方法是使用地图上的forEach创建实例并将其添加到预定义列表中,然后从该列表中启动一个新流。还是我错过了什么? 经典的“在一长串单词中找出3个最常出现的单词” (现在我想流式处理该地图的入口集)

  • 我有下面的方法,这是有效的。我试图完成所有的事情,并获得可选流中的值,而不必执行额外的if检查。是否可以映射并在索引0处获取结果对象?请指教,谢谢。