1. 创建Stream实例的五种方式
@Test public void test1(){ // 创建Stream对象的第一种方式 List<String> list = Lists.newArrayList("A", "B", "C"); Stream<String> stream1 = list.stream(); // 创建Stream对象的第二种方式 String[] arr = {"A", "B"}; Stream<String> stream2 = Arrays.stream(arr); // 创建Stream对象的第三种方式 Stream<String> stream3 = Stream.of("A", "B"); // 创建Stream对象的第四种方式 // iterate会无限执行,所以limit只取前5个 Stream<Integer> stream4 = Stream.iterate(0, x -> x * x).limit(5); // 创建Stream对象的第五种方式 // generate也会无限执行,所以limit只取前5个 Stream<Double> stream5 = Stream.generate(Math::random).limit(5); }
2. Stream常用Api
@Test public void test2() { List<String> list = Lists.newArrayList("abc", "bcd", "efg", "a12", "bcd"); // 1.过滤 list.stream().filter(x -> x.contains("b")).forEach(System.out::println); // 2.取前n list.stream().limit(1).forEach(System.out::println); //3. 跳过前n个 list.stream().skip(2).forEach(System.out::println); //4. distinct 去重 list.stream().distinct().forEach(System.out::println); //5. map映射 list.stream().map(x -> x.toUpperCase()).forEach(System.out::println); System.out.println("-----------------------"); //6. flatMap映射(与scala中的map,flatMap一样的),返回的是个Stream list.stream().flatMap(x -> Stream.of(x.toUpperCase())).forEach(System.out::println); //7.排序 sorted() ---> 自然排序 List<Integer> list1 = Lists.newArrayList(12, 1, 0, -1, 2, 56, 34); list1.stream().sorted().forEach(System.out::println); //8.排序 sorted(Comparator com) --> 按指定规则排序 list1.stream().sorted((e1, e2) -> -Integer.compare(e1, e2)).forEach(System.out::println); //9. 匹配与查找 // list中的所有元素都含有"a" boolean ret = list.stream().allMatch(x -> x.contains("a")); System.out.println(ret); // list只要有一个元素包含有"a",就true ret = list.stream().anyMatch(x -> x.contains("a")); System.out.println(ret); //list中没有以"A"开头的元素 ret = list.stream().noneMatch(x -> x.startsWith("A")); System.out.println(ret); //第一个元素 Optional<String> first = list.stream().findFirst(); System.out.println(first.get()); //找任意一个元素 Optional<String> any = list.parallelStream().findAny(); System.out.println(any.get()); // 找最大值 Optional<Integer> max = list1.stream().max(Integer::compareTo); // 上面这行代码是下面代码的简写 // Optional<Integer> max1 = list1.stream().max((e1, e2) -> Integer.compare(e1, e2)); System.out.println(max.get()); //10 , 归约 Optional<Integer> reduce = list1.stream().reduce((x, y) -> x + y); // list1中元素求和 System.out.println(reduce.get()); Integer sum = list1.stream().reduce(0, Integer::sum); // list1中元素求和 System.out.println(sum); Integer sum2 = list1.stream().reduce(10, Integer::sum); // 10 + list1中元素求和 System.out.println(sum2); //11. collect--> 将stream转成list集合 List<Integer> collect = list1.stream().map(x -> x * 2).collect(Collectors.toList()); collect.forEach(System.out::println); }