lambda -- list转map

本文讨论了在Java编程中将List转换为Map时遇到的 Duplicate key 错误。通过分析一个具体的错误案例,指出当list中存在相同key时会导致转换失败。解决方案是使用JDK8的Collectors.toMap方法,处理重复键的情况。
package com.example.demo.util;

import com.example.demo.entity.UserPO;
import com.google.common.collect.Maps;

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

/**
 * 过滤list中对象的某个属性非空,然后返回一个新的list
 */
public class LambdaForList {
   
   
    public static void main(String[] args) {
   
   
        //1. 初始化数据
        UserPO user1 = new UserPO(1, "java");
        UserPO user2 = new UserPO(2, "C");
        UserPO user3 = new UserPO(3, "PHP");
        List<UserPO> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);
        users.add(user3);

        //3. list转map
        Map<Integer, String> userMap = Maps.newHashMap();
        userMap = users.stream
Java 中,可以使用 Stream API 和 Lambda 表达式将列表换为映射。下面是几种常见的情况及示例代码: ### 键为列表元素,值为元素本身 假设列表中的元素可以直接作为键和值,可使用 `Collectors.toMap` 方法,示例代码如下: ```java import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class ListToMapExample { public static void main(String[] args) { List<String> list = Arrays.asList("apple", "banana", "cherry"); Map<String, String> map = list.stream() .collect(Collectors.toMap( element -> element, // 键 element -> element // 值 )); System.out.println(map); } } ``` ### 键为列表元素的某个属性,值为元素本身 若列表元素是自定义对象,需要使用元素的某个属性作为键,可按如下方式实现。假设有一个 `Person` 类,包含 `id` 和 `name` 属性: ```java import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; class Person { private int id; private String name; public Person(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } } public class ListToMapWithPropertyExample { public static void main(String[] args) { List<Person> personList = Arrays.asList( new Person(1, "Alice"), new Person(2, "Bob"), new Person(3, "Charlie") ); Map<Integer, Person> personMap = personList.stream() .collect(Collectors.toMap( Person::getId, // 键 person -> person // 值 )); System.out.println(personMap); } } ``` ### 处理键冲突的情况 若列表中可能存在键冲突的元素,可提供一个合并函数来处理冲突,示例如下: ```java import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class ListToMapWithConflictExample { public static void main(String[] args) { List<String> list = Arrays.asList("apple", "banana", "apple"); Map<String, String> map = list.stream() .collect(Collectors.toMap( element -> element, element -> element, (existing, replacement) -> existing // 处理键冲突,这里保留现有值 )); System.out.println(map); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值