Collection和Map转换

 List -> Map

设个User类:

复制代码
public class User {
    private String userName;
    private String userId;
    private String userInfo;

    public User(){}

    public User(String userName, String userId, String userInfo) {
        this.userName = userName;
        this.userId = userId;
        this.userInfo = userInfo;
    }

    //getter setter
}
复制代码

1)foreach方法

//foreach
    public Map<String,User> ltmForEach(List<User> list){
        Map<String,User> map = new HashMap<>();
        list.forEach(user -> {
            map.put(user.getUserId(), user);
        });
        return map;
    }

2)stream()方法

复制代码
//stream()
    public Map<String,User> ltmStream(List<User> list){
        /**
         * Collectors.toMap()方法参数:
         * keyMapper: User::getUserId,调用User的getter方法
         * valueMapper: user->user, User类作为value
         * mergeFunction: 当key冲突时,value合并的方法:(n1,n2)->n2为替换,(n1,n2)->n1+n2为累加
         * mapSupplier: Map构造器,需要返回特定Map的时候使用,如TreeMap::new返回以key排序的Map
         */
        return list.stream()
                   .collect(Collectors.toMap(User::getUserId,user->user,(n1,n2)->n2,TreeMap::new));

    }
复制代码

3)Map常用遍历方法

复制代码
// 1. 增强for循环
Map<String, User> ltmStreamMap = l.ltmStream(list);
for(Map.Entry entry : ltmStreamMap.entrySet()){
     System.out.println(entry.getKey()+" : "+entry.getValue());
}

// 2. Iterator迭代器
Map<String, User> ltmForEachMap = l.ltmForEach(list);
Iterator<Map.Entry<String, User>> iterator = ltmForEachMap.entrySet().iterator();
while(iterator.hasNext()){
    Map.Entry<String, User> next = iterator.next();
    System.out.println(next.getKey()+" : "+next.getValue());
}

// 3. 内循环
Map<String, User> ltmForEachMap = l.ltmForEach(list);
ltmForEachMap.forEach((k,v)->{
    System.out.println(k+" : "+v);
});
复制代码

2 Array -> List

Array指数组类型数据,如:String[]、Object[]、int[]等一般使用工具类Arrays的asList方法:

复制代码
public class arrayToList {
    public static void main(String[] args) {
        String[] strs = new String[]{"a","b","c"};
        List<String> list = Arrays.asList(strs);
        for(String str : list){
            System.out.println(str);
        }
    }
}
复制代码

3 List -> Array

集合List转为数组类型Array通常使用Collection的toArray方法

复制代码
public class listToArray {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        //List->Array,申请大小为list.size()的数组空间
        String[] strs = list.toArray(new String[list.size()]);
    }
}
复制代码

4 Array <-> Set

复制代码
public class arrayToSet {
    public static void main(String[] args) {
        /**
         * Array数组类型转为Set类型集合
         * 需要Array->List->Set
         */
        String[] strs = new String[]{"a","b","c"};
        Set<String> set = new HashSet<>(Arrays.asList(strs));

        /**
         * Set转为Array和List转为Array原理相同
         */
        strs = set.toArray(new String[set.size()]);
    }
}
复制代码

5 List <-> Set

List和Set都实现了Collection借口,Collection.addAll()方法相互转换可以通过:

  1)Collection.addAll()

  2)构造方法直接传入List/Set

复制代码
/** * List -> Set
 */
Set set = new HashSet(list);//构造传参
set.addAll(list);//Collection.addAll()

/**
 * Set -> List
 */
List list = new ArrayList(set);
list.addAll(set);
复制代码

https://www.cnblogs.com/torima/p/15138194.html

 

posted @   Bonnie_ξ  阅读(587)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示