• java8新特性Lambada,Steam流


    一:lambda表达式

      其实就是实现接口的,实现接口可以创建类来实现,也可以直接用匿名内部类,lambda就是匿名函数。但是对接口是有要求的,接口的抽象方法只能有一个,这种接口叫做函数式接口,一般会用注解@FunctionalInterface 修饰。由三种符号组成。(), ->,{}方法体 。()里面就是接口抽象方法的参数。{} 里面写逻辑,抽象方法有返回类型的话这儿要return对应的类型。 

      简化规则:1 ()中参数的类型可以省略,参数如果只有一个,()可以省略。

           2  当方法体{}只有一句的时候 {} 可以省略不写,当这一句是return语句的话,要把return也去掉。

    进阶:

       方法引用: 当接口的那个抽象方法在很多地方被引用的时候,会有很多重复的实现,可以写一个公共函数写进去。{}方法体就可以直接引用实现好的方法了。引用方法的参数类型 和返回类型要和接口中方法的参数类型 和返回类型要一致。

     构造方法引用:用类名 :: new 就行

     例子:

     list里面排序 用lambds就会很简单 

     还有用treeSet填写数据的时候比如添加对象时候无法判断大小的情况下 这种写法也会方便
     

     这样写会让重复的不被删除    

     list foreach遍历  

    利用Stream流来遍历 下面的代码是便利后每个元素都加上自己乘0.12。其实也是把一个list放到另一个集合中

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Test3 {
        public static void main(String[] args) {
            List<Integer> list = Arrays.asList(100,200,300,400);
            //stream()把集合转成了流
            //map(方法), 把流里面的每个元素都执行一些
            //map里面的方法,转换了一下。
            //collect(Collectors.toList()) 把转换以后的元素
            //收集起来放到一个新的list里面
            List ls=   list.stream().map((cost)->cost + cost * .12).collect(Collectors.toList());
            //遍历集合costBeforeTax,并且打印里面的元素
            ls.forEach(a->System.out.println(a));
        }
    }

     一般把一个集合数据放到另一个集合。

    package cn.test;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
            List<Integer> list2 = new ArrayList<>();
            List<Integer> list = Arrays.asList(100, 120);
            list.forEach(a -> {
                list2.add(a + 10);
            });
            list2.forEach(System.out::println);
    
        }
    
    
    }

    还有一种情况是把满足条件的的放到另一个集合  用Steam流来写 用filter. 后面的值就是判断值

    package cn.test;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Test {
        public static void main(String[] args) {
    
            List<Integer> list = Arrays.asList(100, 120);
            List ls=   list.stream().filter((cost)->cost==100).collect(Collectors.toList());
            ls.forEach(System.out::println);
    
        }
    
    
    }

    结果为 100哈

    当然也可以结合起来用,结果就是返回200了

    package cn.test;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Test {
        public static void main(String[] args) {
    
            List<Integer> list = Arrays.asList(100, 120);
            List ls=   list.stream().map((cost)->cost+100).filter(a->a==200).collect(Collectors.toList());
            ls.forEach(System.out::println);
    
        }
    
    
    }
    package cn.test;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Objects;
    import java.util.stream.Collectors;
    
    public class Test {
        public static void main(String[] args) {
    
            List<Integer> list = Arrays.asList(100, 120);
            List ls=   list.stream().map((cost)->cost+100).filter(Objects::nonNull).collect(Collectors.toList());
            ls.forEach(System.out::println);
    
        }
    
    
    }

    lsit 删除元素

    系统内置函数接口

    如 removeif中的 Predicate接口   foreach中的Consumer接口

    
    

        

    
    

      

  • 相关阅读:
    Qt Creater更改默认构建目录
    QT-无法定位程序输入点解决方案
    Qt qmake报错(TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension)
    python学习--交互式图形编程实例二
    python学习--交互式图形编程实例一
    python学习--面向对象程序设计实例
    python学习--面向过程程序设计实例
    python学习--程序设计方法实例一
    python学习--字典操作实例二
    python学习--文档
  • 原文地址:https://www.cnblogs.com/ningkuan/p/12803760.html
Copyright © 2020-2023  润新知