Java 中的流
在 Java 8 中引入了流应用编程接口,用于处理对象集合。流是支持各种方法的对象序列,这些方法可以通过流水线来产生所需的结果。 Java 流的特点是–
- 流不是数据结构,而是从集合、数组或输入/输出通道获取输入。
- 流不改变原始的数据结构,它们只根据流水线方法提供结果。
- 每个中间操作都被延迟执行,并作为结果返回一个流,因此各种中间操作可以被流水线化。终端操作标记流的结尾并返回结果。
流上的不同操作- 中间操作:
- map:map 方法用于返回一个流,该流由给定函数应用于该流元素的结果组成。
List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());
- 筛选:筛选方法用于根据作为参数传递的谓词选择元素。
List names = Arrays.asList("Reflection","Collection","Stream"); List result = names.stream().filter(s->s.startsWith("S")).collect(Collectors.toList());
- 排序:排序方法用于对流进行排序。
List names = Arrays.asList("Reflection","Collection","Stream"); List result = names.stream().sorted().collect(Collectors.toList());
终端操作:
- 收集:收集方法用于返回对流执行的中间操作的结果。
List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());
- forEach:forEach 方法用于迭代流的每个元素。
List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->System.out.println(y));
- reduce:reduce 方法用于将流的元素减少到单个值。 reduce 方法以 BinaryOperator 为参数。
List number = Arrays.asList(2,3,4,5);
int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);
这里一个变量被赋值为 0 作为初始值,I 被加入其中。
演示流使用的程序
//a simple program to demonstrate the use of stream in java
import java.util.*;
import java.util.stream.*;
class Demo
{
public static void main(String args[])
{
// create a list of integers
List<Integer> number = Arrays.asList(2,3,4,5);
// demonstration of map method
List<Integer> square = number.stream().map(x -> x*x).
collect(Collectors.toList());
System.out.println(square);
// create a list of String
List<String> names =
Arrays.asList("Reflection","Collection","Stream");
// demonstration of filter method
List<String> result = names.stream().filter(s->s.startsWith("S")).
collect(Collectors.toList());
System.out.println(result);
// demonstration of sorted method
List<String> show =
names.stream().sorted().collect(Collectors.toList());
System.out.println(show);
// create a list of integers
List<Integer> numbers = Arrays.asList(2,3,4,5,2);
// collect method returns a set
Set<Integer> squareSet =
numbers.stream().map(x->x*x).collect(Collectors.toSet());
System.out.println(squareSet);
// demonstration of forEach method
number.stream().map(x->x*x).forEach(y->System.out.println(y));
// demonstration of reduce method
int even =
number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);
System.out.println(even);
}
}
输出:
[4, 9, 16, 25]
[Stream]
[Collection, Reflection, Stream]
[16, 4, 9, 25]
4
9
16
25
6
重要点/观察:
- 一个流由源和一个终端方法组成,源后面跟零个或多个中间方法,中间方法组合在一起(流水线式),终端方法按照描述的方法处理从源获得的对象。
- 流用于根据流水线方法计算元素,而不改变对象的原始值。
本文由阿卡什·奥哈供稿。如果你喜欢 GeeksforGeeks 并想投稿,你也可以使用contribute.geeksforgeeks.org写一篇文章或者把你的文章邮寄到 contribute@geeksforgeeks.org。看到你的文章出现在极客博客主页上,帮助其他极客。
如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处