廖雪峰Java16函数式编程-2Stream-7其他操作
发布时间:2020-12-15 07:50:11 所属栏目:Java 来源:网络整理
导读:1. 排序 StreamT sorted(); //按元素默认大小排序(必须实现Comparable接口)StreamT sorted(Comparator? super T cp); //按指定Comparator比较的结果排序 public static void main(String[] args){ StreamString s = Stream.of("hello","JAVA","python","RU
1. 排序Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? super T> cp); //按指定Comparator比较的结果排序 public static void main(String[] args){ Stream<String> s = Stream.of("hello","JAVA","python","RUBY","PHP"); s.sorted().forEach(str-> System.out.print(str+"t")); System.out.println(); Stream<Integer> s1 = Stream.of(1,9,5,3,7); s1.sorted(Comparator.reverSEOrder()).forEach(str-> System.out.print(str+"t")); } 2.去除重复元素Stream<T> distinct(); //返回去除重复元素的Stream Stream<String> s = Stream.of("hello","hello","JAVA"); s.distinct().forEach(str-> System.out.print(str+"t")); 3. 截取Stream<T> limit(long); //截取Stream前long个元素 Stream<T> skip(long); //跳过Stream前long个元素 Stream<String> s = Stream.of("hello","JAVA"); s.limit(3).forEach(str-> System.out.print(str+"t")); System.out.println(); Stream<Integer> s1 = Stream.of(1,7); s1.skip(3).forEach(str-> System.out.print(str+"t")); 4. concat合并Stream<String> s1 = Stream.of("php","python"); Stream<String> s2 = Stream.of("android","ios"); Stream<String> s = Stream.concat(s1,s2); s.forEach(str-> System.out.print(str+"t")); 5. flatMap把列表的元素取出,构成一个新的Stream把元素映射为Stream,然后合并成一个新的Stream List<String> s1 = new ArrayList<>(); s1.add( "php"); s1.add("JAVA"); s1.add("python"); List<String> s2 = Arrays.asList("android","ios"); Stream<List> l = Stream.of(s1,s2); Stream<String> s = l.flatMap(list -> list.stream()); s.forEach(str-> System.out.print(str+"t")); 6. parallel把一个Stream转换为可以并行处理的StreamStream的元素是串行处理的,也就是只能用单线程来处理,如果要提高效率,比如进行并行排序,只需使用parallel()就可以把一个Stream变成一个并行处理的Stream,通过这个方法调用,后续的操作会尽量的并行处理。 Stream<String> s = Stream.of("php","android","ios"); String[] result = s.parallel() //变成一个可以并行处理的Stream .sorted(). //可以进行并行排序 toArray(String[]::new); System.out.println(Arrays.toString(result)); 7. Stream的聚合方法Optional<T> reduce(BinaryOperater<T> bo) long count() T max(Comparator<? super T> cp)//查找最大元素 T min(Comparator<? super T> cp) //查找最下元素 针对IntStream,longStream,DoubleStream: sum() //求和 average() //求平均值 Integer[] nums = {1,2,4,6}; long max = Stream.of(nums).max((i1,i2)->i1.compareTo(i2)).get(); long min = Stream.of(nums).min((i1,i2)->i1.compareTo(i2)).get(); System.out.println("最大值:"+max+"t最小值:"+min); IntStream ins1 = IntStream.builder().add(1).add(2).add(3).add(4).add(5).add(6).build(); IntStream ins2 = IntStream.builder().add(1).add(2).add(3).add(4).add(5).add(6).build(); Double avg = ins1.average().getAsDouble(); long sum = ins2.sum(); System.out.println("求和:"+sum+"t平均值:"+avg); 8. 测试Stream的元素是否满足boolean allMatch(Predicate<? super T>) //所有元素均满足测试条件 boolean anyMatch(Predicate<? super T>) //至少一个元素满足测试条件 Integer[] nums = {1,6}; boolean max = Stream.of(nums).allMatch(x->x>0); boolean min = Stream.of(nums).anyMatch(x->x>5); System.out.println("元素全部>0:"+max+"t存在元素>5:"+min); 9. forEach循环处理Stream的元素void forEach(Consumer<? super T> action) 10. 把Stream转换为其他类型Object[] toArray() //转换为Object数组 A[] toArray(IntFunction<A[]>) //转换为A[]数组 <R,A> R collect(Collector<? super T,A,R> Collector) //转换为List/Set等集合类型 Stream<String> s1 = Stream.of("php","ios"); String[] arr = s1.toArray(String[]::new); Stream<String> s2 = Stream.of("php","ios"); List<String> list = s2.collect(Collectors.toList()); System.out.println(Arrays.toString(arr)); System.out.println(list.toString()); 11. 总结java.util.stream.Stream题哦那个了许多实用的功能
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |