JAVA常用的集合转换
在Java应用中进行集合对象间的转换是非常常见的事情,有时候在处理某些任务时选择一种好的数据结构往往会起到事半功倍的作用,因此熟悉每种数据结构并知道其特点对于程序员来说是非常重要的,而只知道这些是不够的,有时候你需要一个Map来处理数据,而此时你手中只有一个List,此时知道如何将List转为Map就非常重要了,而只知道for循环将List转为Map这就太Low了,JDK1.8 吸收了许多函数式编程的思想,其中的lambda表达式不仅功能强大,而且减少了很多不必要的代码,本文不是介绍lambda表达式的,主要是利用lambda表达式进行Java中结合的转换,当然lambda表达式的使用往往离不开JDK1.8 的stream类,本文主要使用lambda表达式和stream类来实现Java中集合的转换,也会涉及到利用stream对数据进行的一些处理。
1.List To Map <==> Map To List
将List转换为Map是Java中的常见操作,例如我想知道某个对象是否已经在List中,此时就需要将List转成Map,你总不会打算for循环一个个比吧!
- @Data //lombok提供的注解,会自动添加getter和setter
- public class Student {
- private String id;
- private String name;
- private String info;
- }
- 1
- 2
- 3
- 4
- 5
- 6
现在有一个所有学生信息的列表List<Student> list和一个要新添加的学生Student studentNew,在添加学生之前需要对新添加的学生信息studentNew进行判断是否已经在list中,学生的唯一标识是id,不考虑其他,就是单纯的用Java代码判断,此时就需要将List转为Map,代码如下:
- Map<String, Student> studentMap = list.stream().collect(Collectors.toMap(Student::getId, Function.identity()));
- if(studentMap.containsKey(studentNew.getId())) {
- System.out.println("studentNew in map!");
- }
- 1
- 2
- 3
- 4
将Map转为List就非常简单了:
- List<Student> listValues = new ArrayList<Student>(studentMap.values()); //map values
- List<String> listKeys = new ArrayList<String>(studentMap.keySet()); //map keys
- 1
- 2
2.List To Set <==> Set To List
List与Set之间的转换就很容易了,Set To List:
- Set<String> set = new HashSet<String>();
- set.add("123");
- set.add("456");
- List<String> setToList = new ArrayList<String>(set); //Set To List
- 1
- 2
- 3
- 4
List To Set:
Set<String> listToSet = new HashSet<String>(listSet);
- 1
注:如果需要对List去重可以使用Set,这List To Set + Set To List两个操作可以将List中的重复元素去掉。这里用的是HashSet,如果需要一个有序的List,可以选择TreeSet,TreeSet需要实现对象的Comparable接口。
3.Array To List <==> List To Array
参考:Java中List与Array的转换
注:对Array的许多操作都可以先将Array转为List,然后再进行需要的转换再进行处理,或转为List后使用Stream提供的操作来进行处理。
4.Map To Set <==> Set To Map
Map与Set之间的转换也比较简单,Map To Set:
- Set<String> mapToSetKeys = new HashSet<String>(studentMap.keySet()); //map keys
- Set<Student> mapToSetValues = new HashSet<Student>(studentMap.values()); //map values
- 1
- 2
Set To Map:
Map<String, Student> setToMap = mapToSetValues.stream().collect(Collectors.toMap(Student::getId, Function.identity()));
- 1
5.List排序
要对List中的对象进行排序以前非常麻烦,什么对象实现Comparable接口啊,写一个StudentComparator实现Comparator接口呀,非常麻烦,现在非常简单一行代码搞定(两种方式):
- list.sort(Comparator.comparing(Student::getName)); //按名字排序
- list.sort((p1,p2) -> {
- return p1.getName().toLowerCase().compareTo(p2.getName().toLowerCase());
- });//lambda表达式
- 1
- 2
- 3
- 4
- 5
6.stream中的filter功能
filter功能主要是对集合中的元素进行过滤,以List为例,找出名字叫Jack的学生:
- List<Student> filterResult = list.stream().filter(p -> StringUtils.equals(p.getName(), "Jack")).collect(Collectors.toList());
- filterResult.stream().forEach(p -> {
- System.out.println(p.getName());
- });
- 1
- 2
- 3
- 4
上面的代码使用了stream的filter函数和forEach函数,以后可以少写for循环遍历List了。filter的->后面需要返回一个boolean值。最好”Jack”写前面,习惯。
filter会对List中的每个元素进行处理。
7.stream中的map功能
给每个学生的名字后面加上个China:
- List<Student> mapResult = list.stream().map(p -> {
- p.setName(p.getName() + " China");
- return p;
- }).collect(Collectors.toList());
- mapResult.stream().forEach(p -> {
- System.out.println(p.getName());
- });
- 1
- 2
- 3
- 4
- 5
- 6
- 7
map函数的主要功能是对List中的每个元素进行处理并返回,可以返回其它的数据类型,例如:
- List<String> mapResult = list.stream().map(p -> {
- p.setName(p.getName() + " China");
- return p.getName();
- }).collect(Collectors.toList());
- mapResult.stream().forEach(p -> {
- System.out.println(p);
- });
- 1
- 2
- 3
- 4
- 5
- 6
- 7
8.filter和map结合起来用
找出名字为Jack的Student并在名字后面加上China:
- List<Student> result = list.stream().filter(p -> StringUtils.equals("Jack", p.getName())).map(p -> {
- p.setName(p.getName() + " China");
- return p;
- }).collect(Collectors.toList());
- result.stream().forEach(p -> {
- System.out.println(p.getName());
- });
JAVA常用的集合转换的更多相关文章
- Java 常用List集合使用场景分析
Java 常用List集合使用场景分析 过年前的最后一篇,本章通过介绍ArrayList,LinkedList,Vector,CopyOnWriteArrayList 底层实现原理和四个集合的区别.让 ...
- Java 常用Set集合和常用Map集合
目录 常用Set集合 Set集合的特点 HashSet 创建对象 常用方法 遍历 常用Map集合 Map集合的概述 HashMap 创建对象 常用方法 遍历 HashMap的key去重原理 常用Set ...
- java常用string inputStream转换
1.String –> InputStream InputStrem is = new ByteArrayInputStream(str.getBytes()); 或者 ByteArrayInp ...
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
- java常用集合详解 contains
java集合是对常用数据集合的封装,差不多就是数组吧,验证某个元素是否在数据集合里,最原始的方法是,用个循环,"某个元素"与数据集合中的每个元素逐个进行比较. java 对常用的一 ...
- 将java类的泛型集合转换成json对象
一般用extjs开发传输都是用json比较多,这个将来大家也许会用到... ConvertJsonUtils.java package com.sunweb.util.jsonfactory; imp ...
- JAVA常用集合源码解析系列-ArrayList源码解析(基于JDK8)
文章系作者原创,如有转载请注明出处,如有雷同,那就雷同吧~(who care!) 一.写在前面 这是源码分析计划的第一篇,博主准备把一些常用的集合源码过一遍,比如:ArrayList.HashMap及 ...
- Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
随机推荐
- 缓冲区溢出实验 4 内存管理(类似于malloc free)
实验环境.代码.及准备 https://www.cnblogs.com/lqerio/p/12870834.html vul4 观察foo函数,可见问题在于最后一次tfree(q).由于之前已经tfr ...
- L3-002. 堆栈【主席树 or 线段树 or 分块】
L3-002. 堆栈 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家都知道"堆栈"是一种"先 ...
- codeforce 3C
B. Lorry time limit per test 2 seconds memory limit per test 64 megabytes input standard input outpu ...
- Asp.Net Core Grpc 入门实践
Grpc简介 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. 在 gRPC 中,客户端应用程序可以直接调用不同计算机上的服务器应用程序上的方法,就像它是本地对象一样,从而更轻松地创 ...
- codepen 上25个最受欢迎的HTML/CSS代码
Codepen是一个非常了不起的网站,优设哥在设计师网址导航上也大力推荐过,得到了很多同学的喜爱,也是全球web前端开发人员的圣地! 我搜索了一些时下最好最流行的codepen(仅限于HTML和CSS ...
- infinite scroll blogs
infinite scroll blogs 无限滚动 blogs beacon api https://www.sitepoint.com/introduction-beacon-api/ Histo ...
- ADN vs CDN All In One
ADN vs CDN All In One Netlify & JAMstack https://app.netlify.com/teams/xgqfrms/sites ADN Applica ...
- webfullstack website
webfullstack website refs https://www.lanqiao.cn/paths/ xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许 ...
- Mila Fletcher:日常理财应注意的五点
米拉·弗莱彻于2007年毕业于耶鲁大学,她是一名真正意义上的法学博士,在校期间获得了马歇尔奖学金,毕业后曾在美国多家知名律师事务所任职,目前就职于星盟全球投资公司,专注于帮助公司和客户提供法务咨询,他 ...
- css优先级和权重
1. 权重概念: 权重,是一个相对的概念,是针对某一指标而言.某一指标的权重是指该指标在整体评价中的相对重要程度. 权重系数,是表示某一指标项在指标项系统中的重要程度,它表示在其它指标项不变的情况下, ...