zoukankan      html  css  js  c++  java
  • lambda表达式与函数式接口

    lambda表达式

    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    class Ticket{
        private int ticket = 30;
    
        Lock lock = new ReentrantLock();
    
        public void sale(){
            lock.lock();
            try {
                if (ticket > 0){
                    System.out.println(Thread.currentThread().getName()+"	卖出了第"+ ticket-- +"张票"+"	还剩"+ticket+"张票");
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        }
    }
    
    public class Dugu {
        public static void main(String[] args) {
            final Ticket ticket = new Ticket();
    
            new Thread(() -> {for (int i = 0; i < 40; i++) ticket.sale();},"A").start();
            new Thread(() -> {for (int i = 0; i < 40; i++) ticket.sale();},"B").start();
            new Thread(() -> {for (int i = 0; i < 40; i++) ticket.sale();},"C").start();
    //        sout
    //        new Thread(new Runnable() {
    //            public void run() {
    //                for (int i = 0; i < 40; i++) {
    //                    ticket.sale();
    //                }
    //            }
    //        }, "C").start();
    //        new Thread(new Runnable() {
    //            public void run() {
    //                for (int i = 0; i < 40; i++) {
    //                    ticket.sale();
    //                }
    //            }
    //        }, "B").start();
    //        new Thread(new Runnable() {
    //            public void run() {
    //                for (int i = 0; i < 40; i++) {
    //                    ticket.sale();
    //                }
    //            }
    //        }, "A").start();
        }
    }

     

    函数式接口

    //@FunctionalInterface //该注解代表函数式接口,如果符合函数式接口的表达,可以不加
    interface Foo{
        //如果式函数式接口,普通方法只能定义一个,否则lambda无法找到默认方法
        public int add(int x, int y);
    
        //default方法可以随便加,数量不限,只要实现接口类,即便初始值被默认函数设置也无妨
        default int mul(int x, int y){
            return x * y;
        }
    
        //static方法不影响函数式接口,与静态变量相同,调用不需要实现类
        public static int div(int x, int y){
            return x/y;
        }
    }
    
    
    public class LambdaTest {
        public static void main(String[] args) {
            Foo foo = (int x, int y) -> {
                System.out.println("come in add method");
                return x + y;
            };
            System.out.println(foo.add(3,9));
    
            System.out.println(foo.mul(4,8));
    
            System.out.println(Foo.div(18,3));
        }
    }
    
    以上代码结果:
    come in add method
    12
    32
    6
  • 相关阅读:
    剑指 Offer 05. 替换空格
    28. 实现 strStr()
    67. 二进制求和
    排序算法之二快速排序
    排序算法之一冒泡排序
    将本地文件上传到GitHub
    spring data jpa 操作pipelinedb 的continuous view 与stream
    pipelinedb学习笔记
    PostgreSQL 、springboot 、spring data jpa 集成
    pipelineDB学习笔记-2. Stream (流)
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/12601810.html
Copyright © 2011-2022 走看看