zoukankan      html  css  js  c++  java
  • 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接口

    
    

        

    
    

      

  • 相关阅读:
    Nutch的配置(使用MySQL作为数据存储)
    MySQL简单实现多字段模糊查询
    nutch的一些基础整理
    Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取
    Nutch2 WebPage写入数据库的过程分析
    Nutch2 WebPage 字段解释
    nutch如何修改regex-urlfilter.txt爬取符合条件的链接
    Run Nutch In Eclipse on Linux and Windows nutch version 0.9
    Linux Mint 17.1 安装全配置
    Ubuntu(Linux Mint):sudo apt-get upgrade升级失败
  • 原文地址:https://www.cnblogs.com/ningkuan/p/12803760.html
Copyright © 2011-2022 走看看