Lambda表达式

Posted hpdblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lambda表达式相关的知识,希望对你有一定的参考价值。

public class Test04 {
    public static void main(String[] args) {
        /*
         * Java8中,有一个新的类:Stream类型,它代表一个数据加工流
         * java.util.stream.Stream<T>接口
         *        static <T> Stream<T> generate(Supplier<T> s)
         *
         *  这个静态方法的形参:Supplier<T>供给型接口的类型,可以使用Lambda表达式赋值
         *  接口的静态方法通过“接口名.静态方法”调用
         *
         *  Supplier<T>接口
         *  (1)抽象方法       T get()
         *  (2)抽象方法如何实现
         *        例如:在抽象方法中实现,随机产生一个小数[0,1),返回值类型double
         */
//    Stream<Double> stream = Stream.generate(() -> {return Math.random();});
        //优化
        Stream<Double> stream = Stream.generate(()->Math.random());

        /*
         * 再调用Stream<T>接口的void forEach(Consumer<? super T> action)输出数据
         * 这个方法形参是Consumer<T>消费型接口类型,SAM接口,也可以使用Lambda表达式赋值
         *
         * Consumer<T>消费型接口:
         * (1)抽象方法
         *        void accept(T t)
         * (2)如何实现抽象方法
         *        例如:打印流中的元素
         *
         */
//    stream.forEach((Double num) -> {System.out.println(num);});
        //优化
        stream.forEach(num -> System.out.println(num));
    }
}

 



public class Test05 {

    /*
     * JDK1.8时Map接口增加了一个方法:
     *       default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
     */
    //把原来售价低于5元的,修改为为5元,其他的不变
    /*
     * replaceAll(BiFunction<? super K,? super V,? extends V> function)
     *
     * replaceAll的形参是BiFunction<T,U,R>接口类型,SAM接口,可以使用Lambda表达式赋值
     *
     * BiFunction<T,U,R>接口:
     * (1)抽象方法
     *         R apply(T t, U u)
     * (2)如何实现抽象方法
     *         例如:把原来commodity对象的售价<5元的替换(覆盖)为薪5元
     *
     * 如果抽象方法有返回值,那么实现抽象方法时,需要return语句。
     * 这里看返回值类型是V类型,是commodity的类型
     */
    public static void main(String[] args) {
        HashMap<String,Commodity> commodityMap = new HashMap<>();
        commodityMap.put("苹果",new Commodity("苹果",5.0));
        commodityMap.put("香蕉",new Commodity("香蕉",3.0));
        commodityMap.put("雪梨",new Commodity("雪梨",2.0));
        commodityMap.put("石榴",new Commodity("石榴",4.0));

        commodityMap.forEach((key,fruitsMap)->{
            System.out.print("水果:"+fruitsMap.getName());
            System.out.println("价格:"+fruitsMap.getPrice()+"元");
        });
        System.out.println("--------同一价格后--------");


//        commodityMap.replaceAll((String key,Commodity commodity)->{
//            if(commodity.getPrice()<5.0){
//                commodity.setPrice(5.0);
//            }
//            return  commodity;
//        });

//优化 commodityMap.replaceAll((key,commodity)->{ if(commodity.getPrice()<5.0){ commodity.setPrice(5.0); } return commodity; }); commodityMap.forEach((key,fruitsMap)->{ System.out.print("水果:"+fruitsMap.getName()); System.out.println("价格:"+fruitsMap.getPrice()+"元"); }); } } class Commodity{ private String name; private Double price; public Commodity(String name, Double price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } }

 

以上是关于Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA由一个将JSONArray转成Map的需求引发的lambda语法的学习

函数式编程

C# fun

Lambda表达式

Lambda表达式

Lambda表达式