用 Java 创建流的10种方法
Java 8 中引入的流 API ,用于处理对象的集合。Stream 是一个对象序列,它支持许多不同的方法,这些方法可以通过管道排列来产生所需的结果。
Java 流的特点是–
- 流不是数据结构,而是从集合、数组或输入/输出通道获取输入。
- 流不改变原始数据结构,它们只提供流水线方法的结果。
- 每个中间操作都被延迟执行,并返回一个流,因此各种中间操作都可以用管道连接。终端操作标记流的结尾并返回结果。
1.Using Collection
进场:
- 获取收藏
- 使用 Collection.stream()方法从集合中构造一个顺序流
- 打印流
public void getStream01() {
ArrayList<Object> list = new ArrayList<>();
list.add("Geeks");
list.add("for");
list.add("Geeks");
Stream<Object> stream = list.stream();
Iterator<Object> iterator = stream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
}
Output:
Geeks for Geeks
2.Create a stream from specified values
Stream.of(T…t) 方法可用于创建具有指定 T 值的流,其中 T 是元素。这个方法返回一个包含 t 个元素的顺序流。
public void getStream02() {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
stream.forEach(s -> System.out.println(s + " "));
}
Output:
1 2 3 4 5 6 7 8 9
3.Create stream from an array:
()流和数组流是从指定数组创建顺序流的两种常用方法。当用非基元类型的整数数组调用时,这两个方法都返回一个流
3.1Create stream using Arrays.stream()
public void getStream03() {
String[] arr = new String[] { "a", "b", "c" };
Stream<String> stream = Arrays.stream(arr);
Iterator<String> iterator = stream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
}
Output:
a b c
3.2 Create stream using Stream.of() A non interfering action to be perform on elements as they are consumed from the stream and returns also a new stream.
public void getStream04() {
String[] arr = new String[] { "a", "b", "c" };
Stream<String> stream = Stream.of(arr);
Iterator<String> iterator = stream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
}
Output:
a b c
4.Create an empty stream using Stream.empty()
空()方法在创建时使用,以避免为没有元素的流返回 null。
public void getStream05() {
Stream<Object> stream = Stream.empty();
Iterator<Object> iterator = stream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
}
5.Create a Stream using Stream.builder()
当应该在语句的右边部分另外指定所需的类型时,使用 builder()方法,否则 build()方法将创建流的实例。
public void getStream06() {
Builder<Object> builder = Stream.builder();
Stream<Object> stream = builder.add("a").add("b").add("c").build();
Iterator<Object> iterator = stream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next() + " ");
}
}
Output:
a b c
6.Create an infinite Stream using Stream.iterate()
iterate()方法返回一个无限顺序有序流,该流是通过对初始元素种子迭代应用函数 f 而产生的。在下面的示例中,结果流的第一个元素是迭代方法的第一个参数。为了创建每一个后续元素,该函数应用于前一个元素。在下面的例子中,第二个元素是 4
public void getStream07() {
int seedValue = 2;
int limitTerms = 5;
Stream.iterate(seedValue, (Integer n) -> n * n).limit(limitTerms).forEach(System.out::println);
}
Output:
2 4 16 256 65536
7.Create an infinite Stream using Stream.generate() method
generate()方法接受一个供应商来生成元素,生成的流是无限的。因此,要限制它,请指定所需的大小,否则 generate()方法将一直工作,直到达到内存限制。
public void getStream08() {
int limitTerms = 5;
Stream.generate(Math::random).limit(limitTerms).forEach(System.out::println);
}
Output:
0.2293502475696314 0.5650334795948209 0.3418138293253522 0.36831074763500116 0.4864408670097241
8.Create stream from a Pattern using Predicate
在 java 8 中,Pattern 的谓词 asPredicate()方法创建了一个用于模式匹配的谓词布尔值函数。
public void getStream09() {
Pattern pattern = Pattern.compile("^G");
List<String> list = Arrays.asList("Geeks", "For", "Geek", "GeeksForGeeks", "A Computer Portal");
list.stream().filter(pattern.asPredicate()).forEach(System.out::println);
}
Oupput
Geeks Geek GeeksForGeeks
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140689.html