zoukankan      html  css  js  c++  java
  • java8 学习记录

    一。  lambda表达式

    参考 https://www.cnblogs.com/franson-2016/p/5593080.html

    package com.mytest.java8;
    
    import java.util.Arrays;
    import java.util.IntSummaryStatistics;
    import java.util.List;
    import java.util.function.Consumer;
    import java.util.function.Predicate;
    import java.util.stream.Collectors;
    
    /**
     * @author zhangc
     * @since 2019/1/25 10:39
     * java 双冒号
     * 用法: 遍历, 匿名内部类
     * java stream
     *      filter 可以过滤内容
     *      limit 可以限制条数
     *      sort 可以帮助排序
     *      min,max 最大最小,类似比较
     *      map 可以指定处理如String转int ,或者指定要用的字段如Person::age
     *      collect 收集信息,如把一个list 用逗号关联
     *      summaryStatistics 可以统计一组数字:最大最小平均总和等
     **/
    public class Colon {
        public static void main(String[] args) {
            List<String> a1 = Arrays.asList("a","b","c","d");
            a1.forEach(x -> printValur(x));
    
    
            Consumer<String> consumer = Colon::printValur;
            a1.forEach(x -> consumer.accept(x));
    
            a1.forEach(System.out::println);
    
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("run");
                }
            }).start();
    
            new Thread(()->{
                System.out.println("run");
                System.out.println("run1");
            }).start(); // ()-> 相当于new+方法参数 和 方法实现
    
    
            String[] pl = new String[]{"fds","fds","121","1211111","1233","dkk"};
            //Arrays.sort(pl,(String x,String x1)->(x.compareTo(x1)));
            //Arrays.asList(pl).forEach(x-> System.out.println(x));
            Arrays.sort(pl,Comparable::compareTo);
            Arrays.asList(pl).forEach(x-> System.out.println("张"+x));
            Predicate<String> p1 = (p)->p.length()<5;
            Arrays.asList(pl).stream().filter(p1).limit(3).forEach(x-> System.out.println("filter"+x));
    
            String[] p2 = new String[]{"fds","fds","121","1211111","1233","dkk"};
            Arrays.asList(p2).stream().sorted(Comparable::compareTo).forEach(x->System.out.println("so"+x));
            String dou = Arrays.asList(p2).stream().sorted(Comparable::compareTo).map(String::toString).collect(Collectors.joining(","));
            System.out.println(dou);
    
            List<Integer> sta = Arrays.asList(1,2,3,4,5);
            IntSummaryStatistics ins = sta.stream().mapToInt((x)->x).summaryStatistics();
            System.out.println(ins.getAverage() + ":" + ins.getCount() +":" + ins.getSum()+":"+ins.getMax());
    
        }
    
        public static void printValur(String str) {
            System.out.println("print value : " + str);
        }
    }

    二: 接口新加 默认方法和静态方法 

      

    public interface IterA{
      
      /**
      * 好好的接口为什么要加个默认方法呢(你是不是也有这个疑问,网上只说java8新增了哪些功能不说为什么的,送个呵呵给他们)?
      * 网上查了下: 1. 如果我有很多类实现了这个接口,那么我想往这个接口加个方法,岂不是所有实现类都要改一下,想想就不美好啊。(可是我有个疑问,接口不就是这个功能吗:抽象定义,实现类必须实现。)
      * 2. 写一些默认方法,实现类就可以直接用或者选择复写。 so, 这不是继承吗?表示要疯了
      * 忽然看到网上说实现接口A 和接口B ,如果A 和 B 有同样的方法,则实现类需要复写该方法。 那如果有不同的方法呢,那是不是说A B 的默认方法都可以被实现类使用。原来如此:这是多继承啊。。
      * 整了半天 这是java 通过接口的方式 变相的支持了多继承(但是注意静态方法是不会被继承的,还是老老实实用接口.静态方法调用)。
      */

    default void aa(){ } static void sm(){ System.out.println("12"); } }

     3. 双冒号方法引用

      如 ClassA::new    含义就是 new ClassA()

        ClassA::methodA  含义是 调用 ClassA.mothedA()   如何mothedA 不是静态方法,那就是调用实例的方法

        classA:methodA   就是调用 calssA.methodA();

      注意这种方式 只能是在 支持lambda 的地方使用。如 forEach(  这里使用)。

    4. 元空间: 替代永久代,不在虚拟机中。  

  • 相关阅读:
    Docker是什么
    常用架构模式优缺点
    DDD领域模型自动生成?
    组合数【模板】
    组合数【模板】
    HDU 4800 Josephina and RPG【概率dp】
    HDU 4800 Josephina and RPG【概率dp】
    HDU 4424 Conquer a New Region【并查集】【思维题】
    HDU 4424 Conquer a New Region【并查集】【思维题】
    HDU 4427 Math Magic【dp+优化+滚动数组】【好题】
  • 原文地址:https://www.cnblogs.com/zhangchenglzhao/p/10318807.html
Copyright © 2011-2022 走看看