How do I keep the iteration order of a List when using Collections.toMap() on a stream?

前端 未结 4 2060
自闭症患者
自闭症患者 2020-11-27 15:31

I am creating a Map from a List as follows:

List strings = Arrays.asList(\"a\", \"bb\", \"ccc\");

Map

        
4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-27 16:21

    Provide your own Supplier, Accumulator and Combiner:

        List myList = Arrays.asList("a", "bb", "ccc"); 
        // or since java 9 List.of("a", "bb", "ccc");
        
        LinkedHashMap mapInOrder = myList
            .stream()
            .collect(
                LinkedHashMap::new,                                   // Supplier
                (map, item) -> map.put(item, item.length()),          // Accumulator
                Map::putAll);                                         // Combiner
    
        System.out.println(mapInOrder);  // {a=1, bb=2, ccc=3}
    

提交回复
热议问题