Java中的集合转换(lambda表达式)
2016-09-06 11:47
357 查看
在Java应用中进行集合对象间的转换是非常常见的事情,有时候在处理某些任务时选择一种好的数据结构往往会起到事半功倍的作用,因此熟悉每种数据结构并知道其特点对于程序员来说是非常重要的,而只知道这些是不够的,有时候你需要一个Map来处理数据,而此时你手中只有一个List,此时知道如何将List转为Map就非常重要了,而只知道for循环将List转为Map这就太Low了,JDK1.8 吸收了许多函数式编程的思想,其中的lambda表达式不仅功能强大,而且减少了很多不必要的代码,本文不是介绍lambda表达式的,主要是利用lambda表达式进行Java中结合的转换,当然lambda表达式的使用往往离不开JDK1.8 的stream类,本文主要使用lambda表达式和stream类来实现Java中集合的转换,也会涉及到利用stream对数据进行的一些处理。
现在有一个所有学生信息的列表
将Map转为List就非常简单了:
List To Set:
注:如果需要对List去重可以使用Set,这
注:对Array的许多操作都可以先将Array转为List,然后再进行需要的转换再进行处理,或转为List后使用Stream提供的操作来进行处理。
Set To Map:
上面的代码使用了stream的filter函数和forEach函数,以后可以少写for循环遍历List了。filter的
filter会对List中的每个元素进行处理。
map函数的主要功能是对List中的每个元素进行处理并返回,可以返回其它的数据类型,例如:
文章作者:Tyan
博客:noahsnail.com
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; }
现在有一个所有学生信息的列表
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!"); }
将Map转为List就非常简单了:
List<Student> listValues = new ArrayList<Student>(studentMap.values()); //map values List<String> listKeys = new ArrayList<String>(studentMap.keySet()); //map keys
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
List To Set:
Set<String> listToSet = new HashSet<String>(listSet);
注:如果需要对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
Set To Map:
Map<String, Student> setToMap = mapToSetValues.stream().collect(Collectors.toMap(Student::getId, Function.identity()));
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表达式
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()); });
上面的代码使用了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()); });
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); });
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()); });
文章作者:Tyan
博客:noahsnail.com
相关文章推荐
- java中数组与集合间的转换
- java类的泛型集合转换成json对象
- java中数组与集合间的转换(不通过遍历)
- java各种集合转换成json格式
- java数组和集合之间的转换
- Java技巧:集合和数组的转换
- 将json转换为java集合对象
- Java集合间的相互转换
- 黑马程序员_Java中的两个常用工具类及集合数组的相互转换
- java-集合和数组的转换
- JAVA JSON String to Object 转换中的集合
- 对象(含有java.util.Date),集合等转换成json
- Java在读文件、转换xml或迭代集合的时候缺乏表达力
- Java中数组与集合转换的注意事项
- Java 集合与数组相互转换的方法
- Java 集合 转换成 Json格式 字符串 工具类
- Java中list集合的交集和差集的用法和如何将数组转换为集合的方法
- Java中数组与集合的转换
- Java集合转换【List<-->数组、List<-->Set、数组<-->Set、Map-->Set、Map-->List】
- Java:集合与数组转换