标签:buffere inline 修改 lan api idt string 分享图片 数组
// 通过集合生成 Collection<String> collection = new ArrayList<>(16); Stream<String> stream = collection.stream(); // 并行流 Stream<String> stringStream = collection.parallelStream(); // 通过数组生成 int[] nums = new int[6]; IntStream stream1 = Arrays.stream(nums);
// 通过流的静态工厂 Stream<Integer> integerStream = Stream.of(1, 2, 3); //生成空流 Stream<Integer> empty = Stream.empty(); // 拼接流 Stream<Integer> concat = Stream.concat(integerStream, empty); // 生成无限流, 并不会一开始生成无限个数,加入内存 // 而是通过终端操作, 内部迭代生成, 可以通过limit()截断 Stream<Double> generate = Stream.generate(Math::random); Stream<Integer> iterate = Stream.iterate(1, (x) -> x + 2); iterate.limit(5).forEach(System.out::println); // IntStream 或 LongStream 的静态工厂 // 生成包含 1 到 4 的流, 不含结束值 IntStream.range(1, 5); // 生成包含 1 到 5 的流,包含结束值 IntStream.rangeClosed(1, 5); // 流的builder Stream.Builder<Object> builder = Stream.builder(); builder.accept(1); // add方法返回当前builder对象,以实现链式编程 builder.add(2).add(3); builder.build().forEach(System.out::println);
// map() // 将流中的元素进行处理,返回一个新的数据类型,映射到新流中 List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3)); list.stream().map(i -> String.valueOf(i) + "test").forEach(System.out::println); // mapToInt,mapToLong,mapToDouble 与map类似,只是映射为基本类型到对应的Stream中
//flatMap //flatMap()操作能把原始流中的元素进行一对多的转换,并且将新生成的元素全都合并到它返回的流里面。 List<String> stringList = new ArrayList<>(Arrays.asList("1,2,3", "4,5,6", "7,8,9")); stringList.stream() .flatMap(s -> Arrays.stream(s.split(","))) .forEach(System.out::print); //输出 : 123456789
// 求总和 reduce // Optional<T> reduce(BinaryOperator<T> accumulator); 如果流为空,则返回空,因此返回Optional Optional<Integer> sum1 = Stream.of(1, 2, 3).reduce(Integer::sum); if (sum1.isPresent()) { System.out.println("sum : " + sum1.get()); // sum : 6 } // T reduce(T identity, BinaryOperator<T> accumulator); // 第一个参数为 初始值,若流为空,则返回初始值,因此返回值不可能为空 Integer sum2 = Stream.of(1, 2, 3).reduce(1, Integer::sum); System.out.println("sum : " + sum2); // sum : 7 // <U> U reduce(U identity, // BiFunction<U, ? super T, U> accumulator, // BinaryOperator<U> combiner); //类似上面, 但是第三个参数的combiner用于合并并发流中每个线程的result // 单线程下是不执行的 Integer sum3 = Stream.of(1, 2, 3).reduce(1, Integer::sum, (a,b) -> { System.out.println(111); return a + b; }); System.out.println("sum : " + sum3); // sum : 7
// 收集,将流中的元素重新打包成集合 List<String> collectTest = new ArrayList<>(Arrays.asList("1,2,3", "4,5,6", "7,8,9")); // 主要有两种方法 // 第一种,是自行实现收集操作,与 reduce()很相似 // <R> R collect(Supplier<R> supplier, // BiConsumer<R, ? super T> accumulator, // BiConsumer<R, R> combiner); // 一般主要使用第二种, 直接使用Collectors类中已经实现的静态收集器 //集合 List<String> newList = collectTest.stream().collect(Collectors.toList());//返回list Set<String> newSet = collectTest.stream().collect(Collectors.toSet());//返回set TreeSet<String> newTreeSet = collectTest.stream().collect(Collectors.toCollection(TreeSet::new));//自行定义返回的集合类型 // 返回map,键值都为元素本身 // 或者为元素的某个属性 比如: User::getId Map<String, String> newMap = collectTest.stream().collect(Collectors.toMap(Function.identity(), Function.identity())); // 拼接 String join = collectTest.stream().collect(Collectors.joining()); String joinOnDelimiter = collectTest.stream().collect(Collectors.joining(",")); String joinAllCondition = collectTest.stream().collect(Collectors.joining(",", "begin", "end")); // 聚合 String max = collectTest.stream().collect(Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(String::length)), Optional::get)); Optional<String> min = collectTest.stream().collect(Collectors.minBy(Comparator.comparingInt(String::length))); Double average = collectTest.stream().collect(Collectors.averagingInt(s -> s.length())); Integer sum = collectTest.stream().collect(Collectors.summingInt(s -> s.length())); // 映射,与map()近似,先处理映射,再使用收集器 collectTest.stream().collect(Collectors.mapping(s -> s.toUpperCase(), Collectors.joining(","))); // 分组 collectTest.stream().collect(Collectors.groupingBy(s -> s.length() % 2 == 0)); collectTest.stream().collect(Collectors.partitioningBy(s -> s.length() % 2 == 0)); // 缩减 reducing, 类似reduce() collectTest.stream().collect(Collectors.reducing((s1, s2) -> String.valueOf(Integer.sum(s1.length(), s2.length()))));
标签:buffere inline 修改 lan api idt string 分享图片 数组
原文地址:https://www.cnblogs.com/jry-blog/p/10333745.html