JDK 1.8新特性

 

1.HashMap系列采用红黑树(超过一定数量)

2.更少的代码-lambda表达式

3.强大的Stream API-Stream

4.便于并行-Parallel

5.最大化减少空指针异常-Optional

 

1.lambda表达式:

左侧:lambda表达式的参数列表

右侧:lambda表达式中需要执行的功能,即函数体

语法:

(1)无参数,无返回值

Runnable r = () -> System.out.println("hello lambda");
r.run();

(2)有一个参数,无返回值

(x) -> System.out.print(x);

(3)只有一个参数,可以省略小括号

x -> System.out.print(x);

 (4)有两个以上参数,有返回值,并且lambda体中有多条语句

Comparator<Integer> c1 = (x,y) -> {
    System.out.print(Integer.compare(x,y)+"函数式接口");
    return Integer.compare(x,y);
}

(5)若lambda体中只有一条语句,return和大括号都可以省略不写

Comparator<Integer> c1 = (x,y) -> return Integer.compare(x,y);

(6)lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器可以通过上下文进行类型判断推断出数据类型

(Integer x,Integer y) -> Integer.compare(x,y);

 

2.Stream流

(1)创建

@Test
    public void test1(){
        //1. 可以通过Collections系列集合提供的stream()或parallelStream()
        List<String> list = new ArrayList<>();
        Stream<String> stream = list.stream();

        //2. 通过Arrays中的静态方法stream()获取数组流
        Employee[] emps = new Employee[10];
        Stream<Employee> stream1 = Arrays.stream(emps);

        //3. 通过Stream类中的静态方法of()
        Stream<String> stream3 = Stream.of("", "", "");

        //4. 创建无限流
        //迭代
        Stream.iterate(0,x -> x+2).limit(10).forEach(System.out::println);

        //生成
        Stream<Double> generate = Stream.generate(() -> Math.random());
        generate.limit(5).forEach(System.out::println);
    }

(2)筛选和切片

   /**
    * 筛选和切片
    *
    * filter -- 接受Lambda,从流中排除某些元素
    * limit -- 截断流,使其元素不超过某个给定数量
    * skip -- 跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流,与limit互补。
    * distinct -- 去重,通过hashcode和equals去重。
    */

   List<Employee> list = Arrays.asList(
           new Employee("张三", "上海", 5000, 22),
           new Employee("李四", "北京", 4000, 23),
           new Employee("c五", "日本", 6000, 50),
           new Employee("b七", "香港", 7000, 50),
           new Employee("赵六", "纽约", 1000, 8)
   );

   @Test
   public void test1(){
       Stream<Employee> stream = list.stream();//创建流

       stream
               .filter(e -> e.getAge()>25)//过滤符合条件的流元素
               .limit(5)//只取5个
               .skip(4)//跳过4个
               .distinct()//去重,需重写hashcode和equals方法
               .forEach(System.out::println);//终止操作,获取流

   }

转载自https://blog.csdn.net/op134972/article/details/76408237?locationNum=1&fps=1 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值