• lambda


    代码1

    package com.atguigu.day18;
    
    import org.junit.Test;
    
    public class Demo8 {
        @Test
        public void test1(){
            Runnable runnable=new Runnable() {
                @Override
                public void run() {
                    System.out.println("just run");
                }
            };
    
            //普通方式,无参
            Thread thread=new Thread(runnable);
            thread.start();//just run
            //lambda方式,无参
            new Thread(()->{System.out.println("just run");}).start();//just run
        }
    
        @Test
        public void test2(){
            int a=10;
            int b=20;
            //普通方式
            show(a, b, new Calc() {
                @Override
                public int add(int a, int b) {
                    return a+b;
                }
            });
    
            //使用lambda表达式,有参数
            show(a,b,(int c,int d)->{return c+d;});
        }
    
        static void show(int a,int b,Calc c){
            int sums=c.add(a,b);
            System.out.println(sums);
        }
    }
    
    
    interface Calc{
        int add(int a,int b);
    }

    代码2

    package com.atguigu.day18;
    /*
    @FunctionalInterface
    检验当前的接口是不是函数式接口,只能有一个抽象方法
    * */
    
    @FunctionalInterface
    public interface Demo9 {
        public void show();
    }

    代码3

    package com.atguigu.day18;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.function.BiConsumer;
    import java.util.function.Consumer;
    
    /*
    消费型接口
    
    * */
    public class Demo10 {
        @Test
        public void test1(){
            ArrayList<String> list=new ArrayList<>();
            list.add("李白");
            list.add("杜甫");
            list.add("白居易");
            list.add("李商隐");
            //消费型接口
            list.forEach(new Consumer<String>() {
                @Override
                public void accept(String s) {
                    System.out.println(s);
                }
            });
    
            //lambda调用消费型接口
            list.forEach((l)->{
                System.out.println(l);
            });
            //当只有一个参数的时候,可以省略小括号
            list.forEach(l->{
                System.out.println(l);
            });
        }
    
        @Test
        public void test2(){
            Map<Integer,String> map=new HashMap<>();
            map.put(10,"张三丰");
            map.put(11,"张翠山");
            map.put(12,"张无忌");
            map.put(13,"张小忌");
            //消费接口
            map.forEach(new BiConsumer<Integer, String>() {
                @Override
                public void accept(Integer key, String v) {
                    System.out.println(key+":"+v);
                }
            });
            //lambda调用消费型接口
            map.forEach((k,v)->{
                System.out.println(k+":"+v);
            });
        }
    }

    代码4

    package com.atguigu.day18;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.function.BiFunction;
    import java.util.function.Predicate;
    import java.util.function.Supplier;
    
    public class Demo11 {
    
        //供给型接口
        @Test
        public void test1(){
            Supplier<String> s=new Supplier<String>() {
                @Override
                public String get() {
                    return "hello";
                }
            };
            System.out.println(s.get());//hello
            //lambda供给型接口
            Supplier<String> s1=()->"hello tree";
            System.out.println(s1.get());//hello tree
        }
    
        //功能型接口
        @Test
        public void test2(){
            Map<Integer,String> map=new HashMap<>();
            map.put(10,"张三丰");
            map.put(11,"张翠山");
            map.put(12,"张无忌");
            map.put(13,"张小忌");
    
            map.replaceAll(new BiFunction<Integer, String, String>() {
                @Override
                public String apply(Integer integer, String s) {
                    if (s.endsWith("忌")){
                        return "张有忌"+integer;
                    }
                    return s;
                }
            });
            System.out.println(map);//{10=张三丰, 11=张翠山, 12=张有忌12, 13=张有忌13}
    
            //lambda调用功能型接口
            Map<Integer,String> map2=new HashMap<>();
            map2.put(10,"张三丰");
            map2.put(11,"张翠山");
            map2.put(12,"张无忌");
            map2.put(13,"张小忌");
    
            map2.replaceAll((k,v)->{
                if (v.endsWith("忌")){
                    return v+""+k;
                }return v;
            });
            System.out.println(map2);//{10=张三丰, 11=张翠山, 12=张无忌12, 13=张小忌13}
        }
    
        //判断型接口
        @Test
        public void test3(){
            ArrayList<String> list=new ArrayList<>();
            list.add("李白");
            list.add("杜甫");
            list.add("白居易");
            list.add("李商隐");
    
            list.removeIf(new Predicate<String>() {
                @Override
                public boolean test(String s) {
                    if (s.startsWith("李")){
                        return true;
                    }
                    return false;
                }
            });
            System.out.println(list);//[杜甫, 白居易]
    
            //lambda方式调用判断型接口
            ArrayList<String> list2=new ArrayList<>();
            list2.add("李白");
            list2.add("杜甫");
            list2.add("白居易");
            list2.add("李商隐");
            list2.removeIf(s -> {
                if (s.startsWith("李")) {
                    return true;
                }return false;
            });
            //或者
            //list2.removeIf(s -> s.startsWith("李")?true:false);
            System.out.println(list2);//[杜甫, 白居易]
        }
    }
    
    class EmpManager{
        public static void main(String[] args) {
            ArrayList<Employee> employeeArrayList=new ArrayList<>();
            employeeArrayList.add(new Employee(1,"刘能",50,1200));
            employeeArrayList.add(new Employee(2,"赵四",49,2500));
            employeeArrayList.add(new Employee(3,"大拿",61,3200));
            employeeArrayList.add(new Employee(4,"晓峰",38,3300));
    
            EmpManager empManager=new EmpManager();
            ArrayList<Employee> arrayList=empManager.getSalary(employeeArrayList);
            System.out.println(arrayList);//[Employee{num=3, name='大拿', age=61, salay=3200.0}, Employee{num=4, name='晓峰', age=38, salay=3300.0}]
    
            ArrayList<Employee> arrayList2=empManager.getYoung(employeeArrayList);
            System.out.println(arrayList2);//[Employee{num=4, name='晓峰', age=38, salay=3300.0}]
        }
    
        ArrayList<Employee> getSalary(ArrayList<Employee> employeeArrayList){
            ArrayList<Employee> newArr = new ArrayList<Employee>();
            employeeArrayList.forEach((Employee)->{
                if (Employee.getSalay()>3000){
                    newArr.add(Employee);
                }
            });
            return newArr;
        }
    
        ArrayList<Employee> getYoung(ArrayList<Employee> employeeArrayList){
            ArrayList<Employee> newArr = new ArrayList<Employee>();
            employeeArrayList.forEach((Employee)->{
                if (Employee.getAge()<40){
                    newArr.add(Employee);
                }
            });
            return newArr;
        }
    
    }
    
    
    
    class Employee{
        private int num;
        private String name;
        private int age;
        private double salay;
    
        public Employee() {
        }
    
        public Employee(int num, String name, int age, double salay) {
            this.num = num;
            this.name = name;
            this.age = age;
            this.salay = salay;
        }
    
        public int getNum() {
            return num;
        }
    
        public void setNum(int num) {
            this.num = num;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public double getSalay() {
            return salay;
        }
    
        public void setSalay(double salay) {
            this.salay = salay;
        }
    
        @Override
        public String toString() {
            return "Employee{" +
                    "num=" + num +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", salay=" + salay +
                    '}';
        }
    }

     代码5

    package com.atguigu.day18;
    
    import org.junit.Test;
    
    import java.lang.reflect.Array;
    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.function.Function;
    import java.util.function.Supplier;
    
    /*
    方法引用的语法格式
    1.实例对象名::实例方法
    2.类名::静态方法
    3.类名::实例方法
    * */
    public class Demo12 {
        @Test
        public void test1(){
            Employees employees=new Employees(1,"吴彦祖",23,1000.0);
            //lambda调用方法
            Supplier<String> name = ()->employees.getName();
            System.out.println(name.get());//吴彦祖
    
            //方法引用1
            Supplier<String> name2=employees::getName;
            System.out.println(name2.get());//吴彦祖
        }
    
        @Test
        public void test2(){
            String[] arr={"h","d","c","z","a"};
            //普通排序
            Arrays.sort(arr, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    return o1.compareTo(o2);
                }
            });
            System.out.println(Arrays.toString(arr));//[a, c, d, h, z]
    
            //lambda排序
            String[] arr2={"h","d","c","z","a"};
            //Arrays.sort(arr2,(o1, o2) ->o1.compareTo(o2));
            //方法引用
            Arrays.sort(arr2,String::compareTo);
            System.out.println(Arrays.toString(arr2));//[a, c, d, h, z]
        }
    
        //构造器引用
        @Test
        public void test3(){
            Supplier<Employees> e=new Supplier<Employees>() {
                @Override
                public Employees get() {
                    return new Employees(1,"王熙凤",23,2000);
                }
            };
            System.out.println(e.get());//Employees{num=1, name='王熙凤', age=23, salay=2000.0}
    
            //无参构造应用
            Supplier<Employees> e2=Employees::new;
            System.out.println(e2.get());//Employees{num=0, name='null', age=0, salay=0.0}
        }
    
        @Test
        public void test4(){
            Function<Integer,int[]> f=new Function<Integer, int[]>() {
                @Override
                public int[] apply(Integer integer) {
                    return new int[integer];
                }
            };
            int[] apply=f.apply(2);
            System.out.println(apply.length);//2
            //构造器引用
            Function<Integer,int[]> f2 = int[]::new;
            int[] apply2=f2.apply(3);
            System.out.println(apply2.length);//3
        }
    }
    
    
    class Employees{
        private int num;
        private String name;
        private int age;
        private double salay;
    
        public Employees() {
        }
    
        public Employees(int num, String name, int age, double salay) {
            this.num = num;
            this.name = name;
            this.age = age;
            this.salay = salay;
        }
    
        public int getNum() {
            return num;
        }
    
        public void setNum(int num) {
            this.num = num;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public double getSalay() {
            return salay;
        }
    
        public void setSalay(double salay) {
            this.salay = salay;
        }
    
        @Override
        public String toString() {
            return "Employees{" +
                    "num=" + num +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    ", salay=" + salay +
                    '}';
        }
    }

    代码6

    package com.atguigu.day18;
    
    import org.junit.Test;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.stream.Stream;
    
    /*
    创建流
    * */
    public class Demo13 {
        @Test
        public void test1(){
            ArrayList<Integer> list=new ArrayList<>();
            list.add(10);
            list.add(20);
            list.add(30);
            list.add(40);
            list.add(50);
            list.add(60);
    
            //第一种创建流
            Stream<Integer> stream=list.stream();
            stream.forEach((t)->{
                System.out.println(Thread.currentThread().getName()+"==="+t);
            });
    
            //并行流
            Stream<Integer> stream1=list.parallelStream();
            stream1.forEach((t)->{
                System.out.println(Thread.currentThread().getName()+"=="+t);
            });
    
            //第二种创建流
            int[] arr2={11,12,13,14,15};
            Arrays.stream(arr2).forEach((i)->{
                System.out.println(Thread.currentThread().getName()+"--"+i);
            });
            //或者
            Arrays.stream(arr2).forEach(System.out::println);
    
            //第三种创建流
            Stream.of(11,12,13,14,15).forEach((i)->{
                System.out.println(Thread.currentThread().getName()+"******"+i);
            });
            //或者
            Stream.of(11,22,33,44,55).forEach(System.out::println);
        }
    }

    代码7

    package com.atguigu.day18;
    
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.stream.Stream;
    
    /*
    中间操作
    * */
    public class Demo14 {
        @Test
        public void test1(){
            ArrayList<Integer> list=new ArrayList<>();
            list.add(10);
            list.add(11);
            list.add(12);
            list.add(13);
            list.add(14);
    
            Stream<Integer> stream= list.stream();
            Stream<Integer> stream1=stream.filter((s)->s%2==0);
            stream1.forEach(System.out::println);
            //或者
            list.stream().filter(s->s%2!=0).forEach(System.out::println);
    
        }
    
        @Test
        public void test2(){
            ArrayList<Integer> list=new ArrayList<>();
            list.add(10);
            list.add(11);
            list.add(12);
            list.add(13);
            list.add(14);
            //反向排序
            list.stream().sorted(new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return -o1.compareTo(o2);
                }
            }).forEach(System.out::println);
            //或者
            list.stream().sorted((s1,s2)->{return s1.compareTo(s2);}).forEach(System.out::println);
        }
    }

    代码8

    //终结操作
    
    import org.junit.Test;
    
    import java.util.List;
    import java.util.Optional;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /*
    中间操作可以有多个,终结操作只能有一个
    * */
    public class Demo15 {
        @Test
        public void test1(){
            long count= Stream.of(10,11,20,22,30,33,40,45,50).filter(s->s%2!=0).peek(System.out::println).count();
            System.out.println(count);
        }
    
        @Test
        public void test2(){
            //allMatch 所有元素是不是都是
            //anyMatch 任取一个是不是
            //noneMath 没有是
            boolean b=Stream.of(10,20,30,40).noneMatch(s->s==10);
            System.out.println(b);
        }
    
        @Test
        public void test3(){
            Optional<Integer> first=Stream.of(10,11,12,13,14,15).findFirst();
            System.out.println(first.get());
        }
    
        //collect将符合要求的收集
        @Test
        public void test4(){
            List<Integer> collect=Stream.of(10,11,12,13,14,15).filter((s)->s%2!=0).collect(Collectors.toList());
            System.out.println(collect);
        }
    }

    代码9

  • 相关阅读:
    Idea主题下载
    使用plsql创建用户并授权(图形化界面)
    PLSQL Developer 没有64位版本 + 找不到 msvcr71.dll
    NOIp2017TG解题报告
    Restart
    NOIp2018RP++
    其他题
    Errors
    NOIpDairy
    Code Style for OI
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/15850160.html
Copyright © 2020-2023  润新知