Java 8引入了一个新特性——Stream API,它是一种面向集合(Collection)和数组(Array)等数据源的高级抽象,可以用一种类似于SQL语句的方式来对这些数据进行操作和处理。
使用Stream API可以实现一些常见的数据处理需求,比如筛选、排序、分组、聚合等,而且代码比传统的命令式方式更简洁、易读、易维护。
Stream API的核心思想:
- 将数据源进行转换(转换成一个Stream流)。
- 对Stream流进行各种操作(如map, filter, reduce等),将结果输出到一个容器中或者直接输出到终端。
Stream API具有以下优点:
- 代码简洁:通过链式编程语法可以实现复杂的数据处理逻辑。
- 减少内存占用:Stream是一种惰性求值方式,即在一定时机才进行计算,可以大大减少内存占用。
- 并行处理:Stream可以通过并行处理提高数据处理速度。
以下是一个使用Stream API进行数据处理的例子:
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
int sum = nums.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n)
.sum();
System.out.println(sum);
该示例中,我们首先将整数列表转换为一个Stream流,然后使用filter
方法筛选出偶数,使用mapToInt
方法将结果转换为int类型,最后使用sum
方法求和。该代码简洁易读,同时利用了Stream API的惰性求值和并行处理的特点,实现了高效的数据处理。
常见用法代码样例
以下是一些常见的Stream API用法示例:
1. 对Collection集合进行过滤
List<String> fruits = Arrays.asList("banana", "apple", "orange", "grape", "watermelon");
List<String> filteredFruits = fruits
.stream()
.filter(fruit -> fruit.startsWith("b"))
.collect(Collectors.toList());
System.out.println(filteredFruits);
该代码中,我们首先将一个字符串列表转换成一个Stream流,然后使用filter
方法过滤出所有以字母b开头的字符串,最后使用collect
方法将过滤后的结果收集到一个List列表中。输出结果为[banana]
。
2. 对数组进行操作
int[] numbers = {1, 2, 3, 4, 5};
int sum = Arrays.stream(numbers)
.filter(n -> n % 2 == 0)
.sum();
System.out.println(sum);
该代码将一个整数数组转换成一个IntStream流,使用filter
方法过滤出所有偶数,然后使用sum
方法计算和,输出结果为6
。
3. 对Map集合进行操作
Map<String, Integer> scores = new HashMap<>();
scores.put("John", 80);
scores.put("Mike", 70);
scores.put("Jenny", 90);
scores.put("Andy", 85);
int avgScore = scores
.values() // 获取得分列表
.stream()
.mapToInt(Integer::intValue)
.average() // 求平均分
.orElse(0);
System.out.println(avgScore);
该代码中,我们将一个Map集合转换成一个IntStream流,并使用mapToInt
方法将流中的值转换为int类型。然后使用average
方法求平均分,输出结果为81
。
4. 对对象列表进行操作
假设有一个Person
类,包含了name
和age
两个属性。我们现在要对一个Person
对象列表进行操作:
List<Person> persons = Arrays.asList(
new Person("Alice", 23),
new Person("Bob", 25),
new Person("Charlie", 18),
new Person("Dave", 29)
);
List<String> names = persons
.stream()
.filter(p -> p.getAge() >= 25)
.map(Person::getName)
.collect(Collectors.toList());
System.out.println(names);
该代码首先将一个Person
对象列表转换成一个Stream流,然后使用filter
方法过滤出所有年龄大于等于25的人,使用map
方法将结果转换为对应的姓名,最后使用collect
方法将结果收集到一个List列表中。输出结果为[Bob, Dave]
。
以上仅是几个常见的Stream API用法示例,实际上还有许多其他功能和操作,具体可以参考Java官方文档。
最后,给大家分享一份Java 项目源码,祝愿大家钱途无量!
【sprinboot+MySQL】网上书城管理系统(含论文和PPT)