簡體   English   中英

Java stream 列表索引 map

[英]Java stream list to index map

如何從字符串列表中獲取 map,其中索引是鍵,字符串是值?

如果我有這樣一個列表

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

我想得到一個Map<Integer,String>類的

{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.Supplier,java.util.function.ObjIntConsumer,java.util.function.BiConsumer <R,R>)'在'java.util.8849488不能應用於'java.util.8849488'中.util.stream.Collector<java.lang.Object,capture<?>,java.util.Map<java.lang.Object,java.lang.String>>)'

我缺少什么?

IntStream沒有將Collector作為參數的collect()方法,因此您必須使用boxed()將其轉換為Stream<Integer>

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

只需添加裝箱即可將int轉換為Integer s

IntStream.range(0, list.size())
         .boxed()
         .collect(Collectors.toMap(Function.identity(), i -> list.get(i)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM