环境:jdk1.8
创建stream的方法常见的有:单线程(stream),多线程(parallelStream),Stream.of(),Stream.iterate()等等。
详情见代码:
public static void main(String[] args) {
streamRange();
}
/**
* 用range/rangeclose 创建stream
* */
private static void streamRange() {
// 用range/rangeclose 创建stream
IntStream stream1 = IntStream.range(0, 10);
stream1.forEach(System.out::println);
IntStream stream2 = IntStream.rangeClosed(0, 10);
stream2.forEach(System.out::println);
}
/**
* 用生成器生成stream
*/
private static void streamGenerate() {
// 用生成器生成stream
Stream<Integer> liStream = Stream.generate(() -> new Random().nextInt(100));
// 取前10个打印
liStream.limit(10).forEach(System.out::println);
}
/**
* 迭代器创建stream
*/
private static void streamIterate() {
// iterate 创建stream ,参数一:迭代器起始值,参数二:每次迭代的变化
Stream<Integer> stream = Stream.iterate(0, x -> x + 2);
// 取前10个打印
stream.limit(10).forEach(e -> System.out.println(e));
}
/**
* of 方法创建stream
*/
private static void streamOf() {
Stream<String> stream = Stream.of("abc", "def", "hij", "klm");
stream.forEach(e -> System.out.println(e));
}
/**
* 使用数组创建stream
*/
private static void streamArrays() {
String[] strs = { "juhuasuan", "xinniu", "jingshugou", "konglong" };
Stream<String> list = Arrays.stream(strs);
// 第一次使用stream
list.forEach(e -> System.out.println(e));
// 第二次使用stream
list = Arrays.stream(strs);
list.forEach(System.out::printf);
}
/**
* 多线程创建流
*/
private static void streamMultThreading() {
List<String> list = new ArrayList<>();
list.add("jindong");
list.add("taobao");
list.add("tianmao");
list.add("pinduoduo");
Stream<String> stream = list.parallelStream();
// 第一次使用stream
stream.forEach(e -> System.out.println(e));
// 第二次使用stream
stream = list.parallelStream();
stream.forEach(System.out::printf);
}
/**
* 单线程创建流
*/
private static void streamSingleThread() {
List<String> list = new ArrayList<String>();
list.add("huawei");
list.add("apple");
list.add("oppo");
list.add("vivo");
Stream<String> streamList = list.stream();
// 第一次使用stream
streamList.forEach(s -> System.out.println(s));
// 第二次使用stream
streamList = list.stream();
streamList.forEach(System.out::printf);
}