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)
  • 相关阅读:
    2016年3月9日~10日,杨学明老师为武汉某著名通信企业提供内训课程服务!
    打造高效率产品测试体系--产品测试管理(深圳,2016.3.18~19)
    互联网产品上线前,做些什么——产品、开发、测试的视角
    2016年1月16日,《互联网项目管理高级实务》内训在上海某高科技企业成功举办!
    用C++对C++语法格式进行分析
    mysql主从配置
    Windows Zip/CentOS/Radhat系统安装Mysql5.7.x方法
    c++预声明类引发的无法解析外部符号问题
    解决VS2015单元测试“未能设置用于运行测试的执行上下文”问题
    扩展Linux磁盘空间
  • 原文地址:https://www.cnblogs.com/csj2018/p/11484203.html
Copyright © 2011-2022 走看看