1、方式一:通过集合
Java8 中的 Collection 接口被扩展,提供了两个获取流的方法:
import java.util.ArrayList;
import java.util.stream.Stream;
public class StreamAPITest {
public static void main(String[] args) {
List arrayList = new ArrayList<>();
arrayList.add(“aa”);
arrayList.add(“哈哈”);
arrayList.add(“99”);
//返回一个顺序流,即"aa"->“哈哈”->“99”
Stream stream1 = arrayList.stream();
//返回一个并行流
Stream stream2 = arrayList.parallelStream();
}
}
2、方式二:通过数组
Java8 中的 Arrays 的静态方法 stream() 可以获取数组流:
import java.util.Arrays;
import java.util.stream.Stream;
public class StreamAPITest {
public static void main(String[] args) {
Double[] doubles = {1.1, 2.0, 4.3, 9.9};
Stream stream = Arrays.stream(doubles);
}
}
3、方式三:通过Stream的of()
调用Stream类静态方法 of(),通过显示值创建一个流,其可接收任意数量的参数:
import java.util.stream.Stream;
public class StreamAPITest {
public static void main(String[] args) {
Double[] doubles = {1.1, 2.0, 4.3, 9.9};
Stream doubles1 = Stream.of(doubles);
Stream<? extends Number> stream = Stream.of(1, 2, 3, 9.9);
}
}
4、方式四:创建无限流
可以使用静态方法 Stream.iterate() 和 Stream.generate() 创建无限流:
import java.util.stream.Stream;
public class StreamAPITest {
public static void main(String[] args) {
// 迭代
// public static Stream iterate(final T seed, final UnaryOperator f)
Stream stream = Stream.iterate(0, x -> x + 2);
stream.limit(10).forEach(System.out::println);
// 生成
// public static Stream generate(Supplier s)
Stream stream1 = Stream.generate(Math::random);
stream1.limit(10).forEach(System.out::println);
}
}
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理。而在终止操作时一次性全部处理,称为“惰性求值”。
1、筛选与切片
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
-
@Author: Yeman
-
@Date: 2021-10-05-17:25
-
@Description:
*/
public class StreamAPITest {
public static void main(String[] args) {
List arrayList = Arrays.asList(“aa”,“bb”,“cc”,“aa”);
Stream stream = arrayList.stream();
stream.filter(e -> !e.equals(“aa”)).forEach(System.out :: println); //bb cc
System.out.println(“==========”);
arrayList.stream().limit(2).forEach(System.out :: println); //aa bb
System.out.println(“==========”);
arrayList.stream().skip(2).forEach(System.out :: println); //cc aa
System.out.println(“==========”);
arrayList.stream().distinct().forEach(System.out :: println); //aa bb cc
}
}
2、映射
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
-
@Author: Yeman
-
@Date: 2021-10-05-17:25
-
@Description:
*/
public class StreamAPITest {
public static void main(String[] args) {
List arrayList = Arrays.asList(“aa”,“bb”,“cc”,“aa”);
Stream stream = arrayList.stream();
stream.map(x -> x.toUpperCase()).forEach(System.out :: println); //AA BB CC AA
System.out.println(“====================”);
arrayList.stream().map(StreamAPITest::fromStringToStream).forEach(System.out :: println); //类似于add()
arrayList.stream().flatMap(StreamAPITest::fromStringToStream).forEach(System.out :: println); //类似于addAll()
}
public static Stream fromStringToStream(String str){
ArrayList arrayList = new ArrayList<>();
for (Character c : str.toCharArray()){
arrayList.add©;
}
return arrayList.stream();
}
}
3、排序
import java.util.Arrays;
import java.util.List;
/**
-
@Author: Yeman
-
@Date: 2021-10-05-17:25
-
@Description:
*/
public class StreamAPITest {
public static void main(String[] args) {
List list = Arrays.asList(2, -9, 0, 22, 6, -1);
list.stream().sorted().forEach(System.out::println);
System.out.println(“===============”);
list.stream().sorted((e1,e2) -> -Integer.compare(e1,e2)).forEach(System.out :: println);
}
}
终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void 。流进行了终止操作后,不能再次使用。
1、匹配与查找
import java.util.Arrays;
import java.util.List;
本次面试答案,以及收集到的大厂必问面试题分享:
ter)
import java.util.Arrays;
import java.util.List;
本次面试答案,以及收集到的大厂必问面试题分享:
[外链图片转存中…(img-1MGawLea-1714542913673)]