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
相关推荐
Stream API是JDK8的一大亮点,它提供了用于操作集合的新方式,支持串行和并行流,可以进行高效的数据处理和聚合操作,如map、filter、reduce等。 **5. Date和Time API重构** JDK8对日期和时间API进行了重大改进,...
Java 8 是一个重要的版本更新,它引入了许多新特性,其中最引人注目的就是Lambda表达式和Stream API。这两个特性极大地提升了Java处理集合数据的能力,使得代码更加简洁、高效。接下来,我们将深入探讨Lambda表达式...
8. **Nashorn JavaScript引擎**:JDK 8包含了Nashorn JavaScript引擎,允许Java与JavaScript进行交互,实现脚本编程和嵌入式JS应用。 9. **接口私有方法和静态方法**:JDK 8接口中还可以声明私有方法和静态方法,...
Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一个Java运行环境(JRE)、编译器(javac)以及其他工具,如jar、javadoc等,用于开发和运行Java应用程序。标题和描述中提到的"jdk-8u25、jdk-8u111...
Java开发工具包(JDK)是Java编程语言的核心组件,用于构建和运行Java应用程序。JDK8是Oracle公司发布的Java开发工具的一个重要版本,引入了许多创新功能,对开发者的工作效率产生了显著提升。在这个压缩包中,包含...
- **Lambda表达式**: JDK 8引入了Lambda表达式,使得函数式编程风格在Java中变得更为简洁和易读,特别是在处理集合时。 - **方法引用和构造器引用**: 这些新特性允许直接引用已有方法或构造器,简化了代码并提升了...
本文将详细介绍如何在Windows操作系统上安装JDK8,以及探讨其主要特性和应用。 **1. JDK8的下载与安装** 首先,你需要访问Oracle官方网站下载JDK8的安装包。在本例中,我们拥有名为"jdk-8u361-windows-x64.exe"的...
Java Development Kit(JDK)是Oracle公司提供的用于开发和运行Java应用程序的软件工具包。JDK8是Java编程语言的一个重要版本,引入了许多新特性,优化了语法,并提升了性能。在这个“jdk8免安装版”中,我们拥有的...
Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。JDK8U202是Oracle公司发布的一个重要更新版本,尤其值得注意的是,这是JDK 8的最后一个免费...
Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。 JDK 8是Oracle公司发布的Java平台标准版(Java SE)的一个重要版本,它引入了许多新特性,...
1. **JDK 8的基础**: JDK 8是Java历史上的一个里程碑,它引入了诸如Lambda表达式、方法引用、流API(Stream API)、日期和时间API、新的Optional类等重大改进。这些特性极大地提高了代码的简洁性和可读性,同时也...
这里我们关注的是两个版本:JDK 8和JDK 17。 JDK 8: JDK 8是Oracle公司于2014年3月发布的Java平台标准版(Java SE)的一个重要版本。这个版本引入了许多新的特性,包括: 1. **lambda表达式**:这是Java 8中最显著...
JDK8的`java.time`包替换掉了原来的`java.util.Date`和`java.util.Calendar`,引入了更加直观和强大的日期时间处理类,如LocalDate、LocalTime、LocalDateTime和ZonedDateTime等。 6. **Optional类** Optional类...
2. **方法引用和构造器引用**:除了lambda表达式,JDK 8还支持方法引用和构造器引用,可以直接引用已有方法或类的构造器,减少了代码量并提高了可读性。 3. **默认方法**:在接口中可以定义默认方法,允许接口扩展...
Java JDK 8 是Java开发的重要工具包,它包含了运行和构建Java应用程序所需的库和开发工具。JDK 8是Oracle公司发布的一个里程碑版本,引入了许多创新特性,极大地提升了开发效率和代码质量。对于那些英语不太熟练的...
**Java Development Kit (JDK) 8 是Java编程语言的核心组件,它包含了开发和运行Java应用程序所需的工具和库。此版本是JDK的第181次更新,即JDK 1.8 Update 181(也称为JDK 8u181),它是一个重要的维护版本,提供了...
Java 8 引入的 Lambda 表达式是 Java 编程语言的重大变革之一,它允许以更简洁的方式表示单方法接口的实现,极大地增强了 Java 语言的表达能力,尤其是结合了函数式接口、Stream API 和其他新特性后。接下来,我们将...
4. 测试与调试:JDK8的JVM和JDK自带的工具,如JConsole、VisualVM等,对于测试和调试Java应用程序非常有用。 总之,JDK8是Java开发中的重要组成部分,其特性改进了开发者的体验,提高了代码质量和效率。正确安装并...
Java Development Kit(简称JDK)是Oracle公司发布的用于开发和运行Java应用程序的工具包,它包含了Java编译器、Java虚拟机(JVM)、Java类库以及开发者工具。本压缩包"jdk8安装包(含windows和linux版本).zip"提供...
Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。 JDK 8是Oracle公司发布的Java平台标准版的一个重要版本,首次发布于2014年3月。这个版本引入...