1. String类型List集合排序
List<String> stringList = Arrays.asList("java", "python", "golang", "C#", "Julia", "shell"); List<String> collect = stringList.stream().sorted().collect(Collectors.toList()); collect.forEach(System.out::println);
2. 字符串数组拼接
List<String> stringList = Arrays.asList("abc", "spring", "java", "python"); // 单纯拼接 String result = stringList.stream().collect(Collectors.joining("")); System.out.println(result); // 输出 abcspringjavapython // 拼接间加入分隔符 String result1 = stringList.stream().collect(Collectors.joining("--")); System.out.println(result1); // 输出 abc--spring--java--python // 加大括号 String result2 = stringList.stream().collect(Collectors.joining("--", "{", "}")); System.out.println(result2); // 输出 {abc--spring--java--python}
3. List<Map<String, String>> 数据去重
List<Map<String, String>> list = new ArrayList<>(16) ; Map<String,String> map1 = new HashMap<>(16); map1.put("key1", "val1"); Map<String,String> map2 = new HashMap<>(16); map2.put("key1", "val1"); list.add(map1); list.add(map2); ArrayList<Map<String, String>> data = list.stream().collect( Collectors.collectingAndThen(Collectors.toCollection( () -> new TreeSet<>(Comparator.comparing(m -> m.get("key1")))), ArrayList::new));
4. List对象去重后进行排序操作
BookBo bookBo1 = new BookBo("1", "语文"); BookBo bookBo2 = new BookBo("2", "数学"); BookBo bookBo3 = new BookBo("3", "英语"); BookBo bookBo4 = new BookBo("4", "地理"); BookBo bookBo5 = new BookBo("5", "生物"); BookBo bookBo6 = new BookBo("1", "语文"); List<BookBo> bookBoList = Arrays.asList(bookBo1, bookBo2, bookBo3, bookBo4, bookBo5, bookBo6); List<BookBo> distinctList = bookBoList.stream().collect( Collectors.collectingAndThen(Collectors.toCollection( ()->new TreeSet<>(Comparator.comparing(o-> o.getName()))), ArrayList::new)) .stream().sorted(Comparator.comparing(BookBo::getName)).collect(Collectors.toList());
5. partitioningBy 函数 分组
// 将list中字符串长度大于4的为一组,其他为另一组 List<String> stringList = Arrays.asList("abc", "spring", "java", "python"); Map<Boolean, List<String>> result = stringList.stream().collect(Collectors.partitioningBy(obj -> obj.length() > 4)); System.out.println(result); // 输出 {false=[abc, java], true=[spring, python]} // 根据学生所在的省份进行分组 List<Student> students = Arrays.asList(new Student("辽宁", 18), new Student("吉林", 19), new Student("辽宁", 23), new Student("吉林", 20), new Student("辽宁", 24), new Student("吉林", 23)); Map<String, List<Student>> result2 = students.stream().collect(Collectors.groupingBy(obj -> obj.getProvince()));
6. 统计各省份人数
List<Student> students2 = Arrays.asList(new Student("辽宁", 18), new Student("吉林", 19), new Student("辽宁", 23), new Student("吉林", 20), new Student("黑龙江", 24), new Student("北京", 23)); Map<String, Long> result2 = students2.stream().collect(Collectors.groupingBy(Student::getProvince,Collectors.counting())); System.out.println(JSONUtil.parseObj(result2)); // 输出 {"黑龙江":1,"吉林":2,"辽宁":2,"北京":1}
7. 统计一些人的年龄信息,如平均年龄,人数,最小,最大
List<Student> students = Arrays.asList(new Student("辽宁", 18), new Student("吉林", 19), new Student("辽宁", 23), new Student("吉林", 20), new Student("辽宁", 24), new Student("吉林", 23)); IntSummaryStatistics result = students.stream().collect(Collectors.summarizingInt(Student::getAge)); System.out.println("人数:"+result.getCount()); System.out.println("年龄总和:"+result.getSum()); System.out.println("最小年龄:"+result.getMin()); System.out.println("最大年龄:"+result.getMax()); System.out.println("平均年龄:"+result.getAverage());
8. Stream实现递归查询树形结构
// 构造父级节点 List<User> listUser = list.stream().filter(user -> user.getLevelId().equals("0")) .peek(user -> user.setChildList(getChildrens(user,list))).collect(Collectors.toList()); // 构造子级节点 public List<User> getChildrens(User user,List<User> userList){ List<User> childrens = userList.stream().filter(u -> Objects.equals(u.getLevelId(),user.getId())).map( u -> { u.setChildList(getChildrens(u,userList)); return u; } ).collect(Collectors.toList()); return childrens; }
9. Stream实现根据age进行排序
List<Map<String, Object>> homePageViewList = CollUtil.newArrayList(); Map<String, Object> paramMap = new HashMap(); paramMap.put("name", "张三"); paramMap.put("age", "2"); homePageViewList.add(paramMap); Map<String, Object> paramMap1 = new HashMap(); paramMap1.put("name", "李四"); paramMap1.put("age", "1"); homePageViewList.add(paramMap1); homePageViewList = homePageViewList.stream().sorted((o1, o2) ->{ Integer v1 = Integer.parseInt(o1.get("orderby").toString()); Integer v2 = Integer.parseInt(o2.get("orderby").toString()); return Integer.compare(v1, v2); }).collect(Collectors.toList());
10. Stream实现根据ID,将相同的数据进行合并
List<Map<String,Object>> newList = new ArrayList<Map<String,Object>>(); Map<String,Object> map3 = new HashMap<String,Object>(); map3.put("name","張三"); map3.put("id","1"); newList.add(map3); Map<String,Object> map4 = new HashMap<String,Object>(); map4.put("name","李四"); map4.put("id","1"); newList.add(map4); Map<String,Object> map1 = new HashMap<String,Object>(); map1.put("name","王三"); map1.put("id","2"); newList.add(map1); Map<Object, List<Map<String, Object>>> result = newList.stream().collect(Collectors.groupingBy(m -> m.get("id")));
10.Stream实现根据分组,去重,求count
List<Map<String, Object>> resultList = nativeQueryUpdate.getDataResultNativeQuery(SQL).getResultList(); Map<Object, Map<Object, Long>> resultDataMap = resultList.stream().distinct().collect(Collectors.groupingBy(m -> m.get("tar_ip") , Collectors.groupingBy(m -> m.get("tar_domain"), Collectors.counting())));
11.Stream实现根据下标实现偶数和奇数进行归类
List list = Arrays.asList(1, 3, 5, 7, 9); Map<Boolean, List<Object>> collect = IntStream.rangeClosed(1, list.size()) .boxed() .map(i -> new AbstractMap.SimpleEntry<>(i, list.get(i - 1))) // 把数字和下标绑定起来 .collect(Collectors.partitioningBy(simpleEntry -> Integer.parseInt(simpleEntry.getKey().toString()) % 2 == 0 , Collectors.mapping(Map.Entry::getValue, Collectors.toList()))); // 按照下标是否能被2整除进行分组
12.Stream实现List字符串数据转成Map
List<String> list = new ArrayList<>(); list.add("Mohan"); list.add("Sohan"); list.add("Mahesh"); Map<String, Object> map = list.stream().collect(Collectors.toMap(Function.identity(),s->0));
13.Stream实现List对象数据转成Map
/** * List -> Map * 需要注意的是: * toMap 如果集合对象有重复的key,会报错Duplicate key .... * apple1,apple12的id都为1。 * 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 */ List<User> users Map<String, User> maps = users.stream().collect(Collectors.toMap(User::getName, a -> a,(k1,k2)->k1));
14.Stream实现Map转List,接上
Map<Long, User> maps = users.stream().collect(Collectors.toMap(User::getId, Function.identity())); List<User> userList = maps.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList());
15.根据名称获取产品
Map<String, Integer> resultMap3 = list.stream() .collect(Collectors.toMap(Product::getName, x -> x.getId())); System.out.println(resultMap3);
16.List和数组互转
//List转数组 String[] arrays = list.toArray(new String[0]); //或 String[] arrays = list.stream().toArray(String[]::new); //数组转List List<String> stringList = Arrays.asList(array); //或者 List<String> list = Stream.of(arrays).collect(Collectors.toList());17.Set和数组互转
//Set转数组 String[] array=set.toArray(new String[0]); //或 String[] array= set.stream().toArray(String[]::new); //数组转Set Set<String> set = new HashSet<>(Arrays.asList(array)); //或 Set<String> set = Stream.of(array).collect(Collectors.toSet());18.Set和List互转
//Set转List List<String> list=new ArrayList<>(set); 或 List list=Stream.of(set.toArray(new String[0])).collect(Collectors.toList()); //List转Set Set<String> set=new HashSet<>(list); //或 Set<String> set = list.stream().collect(Collectors.toSet());19.List转Map
相关推荐
新特性 Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把...Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...
支持 Java 8 的新特性:JDK-8u333 支持 Java 8 中的新特性,如 Lambda 表达式、Stream API、函数式接口等。 兼容性改进:JDK-8u333 增强了与其他 Java 版本的兼容性,提高了向后兼容性。 一些 API 和语言改进:这个...
它引入了众多新特性,包括 Lambda 表达式、函数接口、流处理等,为 Java 编程带来了极大的便利和提升。 其中最显著的特性是 Lambda 表达式,它提供了一种简洁、灵活的编程方式,使得 Java 编程可以更加函数式化。...
模块化: 模块化是jdk9或者说jdk8之后最大的改进,在jdk8及以前,jvm启动时,需要加载非常多的不需要的外部扩展类库,导致程序消耗的内存非常大, 并且在打包后,应用的归档包也是比较庞大。但是在模块化系统中,jvm...
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...
Java SE 8自去年发布以来,应用率已创造了纪录。官方公告介绍:Java 8是款革命性开发平台,其全面升级现有Java编程模式,带来一项协同开发的J VM、Java语言以及库。Java 8平台集合生产力、易用性、多语种编程、更高...
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 jdk1.8新特性 1)Java 8允许我们给接口添加...
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。没有JDK的话,无法编译Java程序(指java源码....
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 jdk1.8新特性 Java 8允许我们给接口添加一个...
linux :jdk-8u261-linux-x64 windows:jdk-8u221-windows-x64 jdk1.8新特性 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 新增lambda表达式 提供函数式接口 Java 8 允许你使用...
JDK 8 主要特性如下:Lambda表达式,一种新的语言特性,能够使功能作为方法参数或将代码作为数据。显著增加和修改了Java语言特性,增添了标准库,包括默认方法,新的java.util.stream包及 Date-Time API。Compact ...
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。没有JDK的话,无法编译Java程序(指java源码....
jdk11对于jdk8新增的特性,JDK 8引入了Lambda表达式、Stream API、Date Time API等重要特性,简化了代码并支持多核技术。而JDK 11在功能上进行了扩展,引入了模块化系统、HTTP客户端API、预测性编译等新特性...
Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数...Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 jdk1.8新特性 Java 8允许我们给接口添加一个...
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。 因此掌握 JDK是学好Java的第一步。 Lambda表达式,一种新的语言特性,能够使功能作为方法...
Java SE 8自去年发布以来,应用率已创造了纪录。官方公告介绍:Java 8是款革命性开发平台,其全面升级现有Java编程模式,带来一项协同开发的JVM、Java语言以及库。Java 8平台集合生产力、易用性、多语种编程、更高...
jdk-8u181-windows-x64 JDK1.8新特性: Lambda表达式,一种新的语言特性,能够使功能作为方法参数或将代码作为数据。 • 显著增加和修改了Java语言特性,增添了标准库,包括默认方法,新的java.util.stream包及 ...