Java中的stream函数是什么?
Java中的Stream是一种用于操作集合和数组的API,它提供了一种流式操作的方法,可以对数据进行流式处理。它提供了进行过滤、映射、排序、归约等操作的方法。Stream是Java 8引入的一个新特性,它能够更加简洁和优雅地处理数据,它具有以下几个特点。
1. 函数式编程风格
Stream API采用了函数式编程的思想,它将集合操作转化为一种类似于SQL语句的形式。使用Stream API可以避免使用传统的for循环和迭代器,通过链式调用一系列方法来处理数据,使代码更加简洁、易读。
2. 惰性求值
Stream采用了惰性求值的方式,相当于对数据进行了一次准备工作,但并不会马上执行。只有当需要时才会执行。这种方式可以大大减少内存的使用,提高程序的效率。
3. 并行处理
Stream API还支持并行处理,集合中的元素可以被分配到多个线程中,从而提高程序的运行速度。并行流的处理方式和普通流的处理方式非常相似,只需要将调用stream()方法改为parallelStream()即可。
Stream API提供了多种方法来处理集合和数组中的数据,下面介绍一下几个比较常用的方法。
1. filter()方法
filter()方法用于过滤集合中的元素,返回一个新的集合或流。它接受一个Predicate类型的参数,用于判断集合中的元素是否符合条件。例如,我们可以使用filter()方法来过滤出集合中所有年龄大于20岁的人:
List<Person> persons = new ArrayList<>();
// ...
List<Person> result = persons.stream()
.filter(p -> p.getAge() > 20)
.collect(Collectors.toList());
上面的代码使用Stream的filter()方法过滤出年龄大于20岁的人,并使用collect()方法将结果转化为List类型。
2. map()方法
map()方法用于将集合中的元素按照一定的规则进行转化,返回一个新的集合或流。它接受一个Function类型的参数,用于将集合中的元素转化为另一种类型。例如,我们可以使用map()方法将集合中的字符串转化为大写字母:
List<String> list = Arrays.asList("hello", "world", "java");
list.stream()
.map(s -> s.toUpperCase())
.forEach(System.out::println);
上面的代码使用Stream的map()方法将集合中的字符串全部转化为大写字母,并使用forEach()方法输出结果。
3. sorted()方法
sorted()方法用于对集合中的元素进行排序,返回一个新的集合或流。它接受一个Comparator类型的参数,用于指定排序的方式。例如,我们可以使用sorted()方法对集合中的元素按照年龄进行排序:
List<Person> persons = new ArrayList<>();
// ...
List<Person> result = persons.stream()
.sorted((p1, p2) -> p1.getAge() - p2.getAge())
.collect(Collectors.toList());
上面的代码使用Stream的sorted()方法对集合中的元素按照年龄进行排序,并使用collect()方法将结果转化为List类型。
4. reduce()方法
reduce()方法用于把集合中的所有元素按照一定的规则进行归约,返回归约后的结果。它接受一个BinaryOperator类型的参数,用于指定归约的规则。例如,我们可以使用reduce()方法计算集合中所有元素的和:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream()
.reduce(0, (a, b) -> a + b);
System.out.println(sum);
上面的代码使用Stream的reduce()方法计算集合中所有元素的和,并使用System.out.println()方法输出结果。
总之,Stream API提供了一种更加简洁和优雅的方式来处理集合和数组中的数据,它是Java 8引入的一项重要特性,对提高程序的效率和开发效率都有非常大的帮助。
