Java如何将List转成Map,及其细节(Java中用Stream)

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 Java如何将List转成Map,及其细节(Java中用Stream),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Java如何将List转成Map,及其细节(Java中用Stream)

详细看代码

package com.example.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 通过 Stream 的 API 将 List 转 Map
 */
public class TestListToMapWithStreamApi {
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class MyEnt {
        private String key;
        private String value;
    }

    public static void main(String[] args) {
        MyEnt m1 = new MyEnt("my_key1", "Stone");
        MyEnt m2 = new MyEnt("my_key2", "Cassie");
        MyEnt m3 = new MyEnt("my_key1", "Stone2");

        // 构造 List
        List<MyEnt> list = new ArrayList<>();
        list.add(m1);
        list.add(m2);
        list.add(m3);

        // 【将List转Map】
        // 【1】强烈建议使用三参数的接口,否则在key出现重复后会出现运行时异常
        // Map<String, MyEnt> map0 = list.stream().collect(Collectors.toMap(x -> x.getKey(), x -> x));
        // System.out.println(map0);// Duplicate key TestListToMapWithStreamApi.MyEnt(key=my_key1, value=Stone)

        // 【2】三参接口:第一个指明什么作为key,第二个指明什么作为value,第三个是在key出现重复后如何处理
        Map<String, MyEnt> map1 = list.stream().collect(Collectors.toMap(x -> x.getKey(), x -> x, (k1, k2) -> k1));
        System.out.println(map1);

        // 【3】关于第三个参数的细节:含义是k1和k2假设key冲突保留谁的意思,上面那个方法保留k1,下面这个保留k2,两者打印的结果是不一样的,观察value值即可知道结论。
        Map<String, MyEnt> map2 = list.stream().collect(Collectors.toMap(x -> x.getKey(), x -> x, (k1,k2) -> k2));
        System.out.println(map2);
    }
}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135143.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!