在 Java 8 中引入的 Stream 是对集合数据进行操作和处理的一种高级方式,它提供了一种声明式的编程风格,使得数据处理更加简洁、高效和易于理解。

主要特点和优势

  1. 声明式编程: 您只需描述您想要的结果,而不是详细说明如何实现这个结果。这使得代码更具可读性和可维护性。

  2. 函数式编程风格: 可以使用函数式接口和 lambda 表达式来定义对数据的操作。

  3. 流水线操作: 一系列的中间操作(如 filtermapsorted 等)可以链接在一起,形成一个处理流水线,最后通过终端操作(如 collectforEachreduce 等)产生最终的结果。

  4. 并行处理: 可以很容易地将顺序流转换为并行流,从而利用多核 CPU 的优势,提高处理大数据集的性能。

    复制代码
     @Test
     public void groupTest() {
     	List<Person> persons = ImmutableList.of(
     			new Person("Alice", 25),
     			new Person("Bob", 30),
     			new Person("Charlie", 25),
     			new Person("David", 35)
     	);
     	// 对对象进行分组
     	Map<Integer, List<Person>> groupedPersons = persons.stream().collect(Collectors.groupingBy(Person::getAge));
     	Assert.assertEquals(3, groupedPersons.keySet().size());
     }
    
     @Test
     public void partitionedTest() {
     	List<Person> persons = ImmutableList.of(
     			new Person("Alice", 25),
     			new Person("Bob", 30),
     			new Person("Charlie", 25),
     			new Person("David", 35)
     	);
     	Map<Boolean, List<Person>> partitionedPersons = persons.stream().collect(Collectors.partitioningBy(p -> p.getAge() > 30));
     	Assert.assertEquals(1, partitionedPersons.get(true).size());
     }
    
     @Test
     public void flattenedTest() {
     	List<List<String>> names = ImmutableList.of(
     			ImmutableList.of("Alice", "Bob"),
     			ImmutableList.of("Charlie", "David")
     	);
     	List<String> flattenedNames = names.stream()
     			.flatMap(List::stream)
     			.collect(Collectors.toList());
     	Assert.assertEquals(4, flattenedNames.size());
     }
    
     @Test
     public void sortedTest() {
     	List<Person> persons = ImmutableList.of(
     			new Person("Alice", 25),
     			new Person("Bob", 30),
     			new Person("Charlie", 25),
     			new Person("David", 35)
     	);
     	List<Person> sortedPersons = persons.stream()
     			.sorted(Comparator.comparing(Person::getAge).thenComparing(Person::getName))
     			.collect(Collectors.toList());
     	Assert.assertEquals("David", sortedPersons.get(sortedPersons.size() - 1).getName());
     }
    
     @Test
     public void sortedByLengthTest() {
     	List<String> words = ImmutableList.of("banana", "cherry", "apple");
     	List<String> sortedWords = words.stream()
     			.sorted((s1, s2) -> Integer.compare(s1.length(), s2.length()))
     			.collect(Collectors.toList());
     	Assert.assertEquals("apple", sortedWords.get(0));
     }
    
     @Test
     public void distinctTest() {
     	List<Integer> list1 = ImmutableList.of(1, 2, 3);
     	List<Integer> list2 = ImmutableList.of(3, 4, 5);
     	List<Integer> combinedList = Stream.concat(list1.stream(), list2.stream())
     			.distinct()
     			.collect(Collectors.toList());
     	Assert.assertEquals(5, combinedList.size());
     }
    
     @Test
     public void filterTest() {
     	List<String> words = ImmutableList.of("apple", "banana", "cherry");
     	List<String> longWords = words.stream()
     			.filter(word -> word.length() > 5)
     			.collect(Collectors.toList());
     	Assert.assertEquals(2, longWords.size());
     }
    
    
    
     @Test
     public void maxTest() {
     	List<Integer> numbers = ImmutableList.of(1, 5, 3, 7, 2);
     	int max = numbers.stream()
     			.max(Integer::compareTo)
     			.orElse(0);
     	Assert.assertEquals(7, max);
    
     	double average = numbers.stream()
     			.mapToDouble(Integer::doubleValue)
     			.average()
     			.orElse(0);
     	System.out.println(average);
     }
相关推荐
爱吃甜品的糯米团子11 分钟前
详解 JavaScript 内置对象与包装类型:方法、案例与实战
java·开发语言·javascript
程序定小飞1 小时前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring
攀小黑1 小时前
基于若依-内容管理动态修改,通过路由字典配置动态管理
java·vue.js·spring boot·前端框架·ruoyi
青云交2 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用
java·spark·lstm·可视化·java 大数据·空气质量监测·污染溯源
森语林溪2 小时前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
郝开2 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
小猪咪piggy3 小时前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀3 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
向葭奔赴♡3 小时前
Spring IOC/DI 与 MVC 从入门到实战
java·开发语言
早退的程序员3 小时前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven