zoukankan      html  css  js  c++  java
  • 廖雪峰Java16函数式编程-2Stream-7其他操作

    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+"	"));
            System.out.println();
            Stream<Integer> s1 = Stream.of(1,9,5,3,7);
            s1.sorted(Comparator.reverseOrder()).forEach(str-> System.out.print(str+"	")); 
        }
    
    ## 2.去除重复元素 Stream distinct(); //返回去除重复元素的Stream ```#java Stream s = Stream.of("hello","JAVA","hello","RUBY","JAVA"); s.distinct().forEach(str-> System.out.print(str+" ")); ```

    3. 截取

    Stream<T> limit(long); //截取Stream前long个元素
    Stream<T> skip(long); //跳过Stream前long个元素
    
            Stream<String> s = Stream.of("hello","JAVA","hello","RUBY","JAVA");
            s.limit(3).forEach(str-> System.out.print(str+"	"));
            System.out.println();
            Stream<Integer> s1 = Stream.of(1,9,5,3,7);
            s1.skip(3).forEach(str-> System.out.print(str+"	"));
    

    4. concat合并

            Stream<String> s1 = Stream.of("php","JAVA","python");
            Stream<String> s2 = Stream.of("android", "ios");
            Stream<String> s = Stream.concat(s1,s2);
            s.forEach(str-> System.out.print(str+"	"));
    
    ## 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+"	"));
    

    6. parallel把一个Stream转换为可以并行处理的Stream

    Stream的元素是串行处理的,也就是只能用单线程来处理,如果要提高效率,比如进行并行排序,只需使用parallel()就可以把一个Stream变成一个并行处理的Stream,通过这个方法调用,后续的操作会尽量的并行处理。

            Stream<String> s = Stream.of("php","JAVA","python","android", "ios");
            String[] result = s.parallel() //变成一个可以并行处理的Stream
                .sorted(). //可以进行并行排序
                toArray(String[]::new); 
            System.out.println(Arrays.toString(result));
    
    ## 7. Stream的聚合方法 Optional reduce(BinaryOperater bo) long count() T max(Comparator cp)//查找最大元素 T min(Comparator cp) //查找最下元素 针对IntStream, longStream, DoubleStream: ```#java sum() //求和 average() //求平均值 ``` ```#java Integer[] nums = {1,2,3,4,5,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+" 最小值:"+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+" 平均值:"+avg); ``` ## 8. 测试Stream的元素是否满足 boolean allMatch(Predicate) //所有元素均满足测试条件 boolean anyMatch(Predicate) //至少一个元素满足测试条件 ```#java Integer[] nums = {1,2,3,4,5,6}; boolean max = Stream.of(nums).allMatch(x->x>0); boolean min = Stream.of(nums).anyMatch(x->x>5); System.out.println("元素全部>0:"+max+" 存在元素>5:"+min); ``` ## 9. forEach循环处理Stream的元素 void forEach(Consumer action) ## 10. 把Stream转换为其他类型 Object[] toArray() //转换为Object数组 A[] toArray(IntFunction) //转换为A[]数组 R collect(Collector Collector) //转换为List/Set等集合类型 ```#java Stream s1 = Stream.of("php","JAVA","python","android", "ios"); String[] arr = s1.toArray(String[]::new); Stream s2 = Stream.of("php","JAVA","python","android", "ios"); List list = s2.collect(Collectors.toList()); System.out.println(Arrays.toString(arr)); System.out.println(list.toString()); ``` ## 11. 总结 java.util.stream.Stream题哦那个了许多实用的功能 * 转换操作:map,filter,sorted,distinct * 合并操作:concat,flatMap * 并行处理:parallel * 聚合操作:reduce,count,max,min,sum,average * 其他操作:allMatch,anyMatch,forEach 参考 [https://blog.csdn.net/qq_28410283/article/details/80783505](https://blog.csdn.net/qq_28410283/article/details/80783505) [https://www.cnblogs.com/a-du/p/8289537.html](https://www.cnblogs.com/a-du/p/8289537.html)
  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/csj2018/p/11484203.html
Copyright © 2011-2022 走看看