学習ポータル1 - ラムダ式のJDK8特性

1、expressionパラメータのリスト - >機能が実行します

フォーマット1:パラメータなし戻り値なし

フォーマット2:1つのパラメータ、戻り値のない、あなたは括弧を書き込むことはできません

フォーマット3:2つの以上のパラメータがあり、戻り値、複数の文でラムダ

フォーマット4:二つ以上のパラメータ、戻り値がありますが、ラムダは一つだけの文で、あなたは括弧とリターンを書き込むことはできません

フォーマット5:データ型のラムダ式パラメータリストを省略することができ、JVMは、文脈から推測することができる、すなわち「型推論」

概要

上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省

2、ラムダ式は、の「関数インタフェース」をサポートする必要があります

「機能インタフェース」に定義されます

1つのインターフェイスだけ抽象インタフェース・メソッド

3、Java(登録商標)8が内蔵4つのコア機能インタフェース

消費:消費者インタフェース

    void accept(T t);
    
    // case:消费
    @Test
    public void test2() {
        consumerMoney(1000d, (m) -> System.out.println("消费" + m + "元"));
    }
    
    private static void consumerMoney(Double money, Consumer<Double> consumer) {
        consumer.accept(money);
    }

サプライヤー:供給インタフェース

    T get();
    
    // case:生成指定个数的整数放入集合中
    @Test
    public void test3() {
        List<Integer> numList = getNumList(10, () ->(Math.random() * 100));
        for (Integer num : numList) {
            System.out.println(num);
        }
    }
    
    private static List<Integer> getNumList(int num, Supplier<Double> supplier) {
        List<Integer> numList = Lists.newArrayList();
        for (int i = 0; i < num; i++) {
            numList.add(supplier.get().intValue());
        }
        return numList;
    }

機能<T、R>:関数インタフェース

    R apply(T t);

	// case:处理字符串    
    @Test
    public void test4() {
        String s = filterStr("\b\b 函数型接口  ", str -> str.trim());
        System.out.println(s);
    }
    
    private static String filterStr(String oldStr, Function<String, String> function) {
        return function.apply(oldStr);
    }

述語:アサーションインタフェース

    boolean test(T t);
   
    // case:将满足条件的字符串放入集合中 
    @Test
    public void test5() {
        List<String> oldStrList = Arrays.asList("aaa", "bbbb", "cc", "dd", "e");
        List<String> newStrList = putStrToList(oldStrList, x -> x.length() < 3);
        for (String s : newStrList) {
            System.out.println(s);
        }
    }
    
    private static List<String> putStrToList(List<String> oldStrList, Predicate<String> predicate) {
        List<String> newStrList = Lists.newArrayList();
        for (String str : oldStrList) {
            if (predicate.test(str)) {
                newStrList.add(str);
            }
        }
        return newStrList;
    }

4、参照方法

定義:コンテンツラムダ本体は方法を実現しています

フォーマット1:メソッド名のオブジェクト::例

フォーマット2:クラスの静的メソッド名::

フォーマット3:メソッドのクラス名の例::

注意事項:ラムダ本体は、メソッドのパラメータリストと呼ばれ、抽象メソッドの戻り値の型と一貫性の関数インタフェースに機能リストの型を返します

図5に示すように、基準コンストラクタ

フォーマット:クラス名::新しいです

注意事項:パラメータリストのコンストラクタは、抽象メソッドのインタフェース機能パラメータリストと一致するために呼び出される必要があります

6、配列参照

フォーマット:タイプ::新しいです

    @Test
    public void test6() {
        // 对象::实例方法名
        Consumer consumer = (x) -> System.out.println(x);
        Consumer consumer1 = System.out::println;
        consumer1.accept("bbb");
    
        // 类::静态方法名
        Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
        Comparator<Integer> com1 = Integer::compare;
        int result = com1.compare(1, 2);
        System.out.println(result);
    
        // 类::实例方法名
        BiPredicate<String, String> biPredicate = (x, y) -> x.equals(y);
        BiPredicate<String, String> biPredicate1 = String::equals;
        boolean test = biPredicate1.test("b", "b");
        System.out.println(test);
    
        // 无参构造器引用
        Supplier<Item> supplier = () -> new Item();
        Supplier<Item> supplier1 = Item::new;
        System.out.println(JSON.toJSONString(supplier1));
    
        // 一个参数构造器引用
        Function<Long, Item> supplier2 = Item::new;
    
        // 数组引用
        Function<Integer, String[]> fun = (x) -> new String[x];
        Function<Integer, String[]> fun1 = String[]::new;
        String[] strings = fun.apply(10);
        System.out.println(strings.length);
    }

項目オブジェクト

    public class Item {
        /**
         * 商品编号
         */
        public Long numId;
        /**
         * 商品名称
         */
        public String title;
        /**
         * 商品销量
         */
        public Long volume;
        /**
         * 商品的库存
         */
        public Long num;
        /**
         * 商品价格
         */
        public Double price;
    
        public Item() {
        }
    
        public Item(Long numId) {
            this.numId = numId;
        }
    
        public Item(Long numId, String title, Long volume, Long num, Double price) {
            this.numId = numId;
            this.title = title;
            this.volume = volume;
            this.num = num;
            this.price = price;
        }
    
        public Long getNumId() {
            return numId;
        }
    
        public void setNumId(Long numId) {
            this.numId = numId;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public Long getVolume() {
            return volume;
        }
    
        public void setVolume(Long volume) {
            this.volume = volume;
        }
    
        public Long getNum() {
            return num;
        }
    
        public void setNum(Long num) {
            this.num = num;
        }
    
        public Double getPrice() {
            return price;
        }
    
        public void setPrice(Double price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Item{" +
                    "numId=" + numId +
                    ", title='" + title + '\'' +
                    ", volume=" + volume +
                    ", num=" + num +
                    ", price=" + price +
                    '}';
        }
    }

おすすめ

転載: blog.csdn.net/wy798393546/article/details/95306525