美文网首页
33、Lambda(一)

33、Lambda(一)

作者: 爱学习的代代 | 来源:发表于2021-05-17 09:19 被阅读0次

lambda的表达式必须能够符合接口中定义的抽象方法,从参数、返回值,到异常都必须匹配。

  1. lambda完整版是 (参数) ----> {代码块},其中()和{} 在特定场合下也可以省略
  2. lambda可以由返回值,使用return语句即可,当然foreach接口没有,所有lambda表达式也不能有
  3. lambda可以使用外部数据,看着和匿名内部类是一样的
  4. lambda 不使用外部数据的话:
  • 静态方法可以使用类名::方法名
  • 实例方法可以使用实例变量::方法名
package day19;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

public class IterateListLambdaAppMain {
    public static void main(String[] args) {
        List<String> myList = addElementToList(new ArrayList<>());

        String outside = "outside string";

//        for(String s: myList) {
//            processString(outside + s);
//        }

//      匿名内部类实现循环:
//        myList.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                processString(outside + s);
//            }
//        });

//     lambda的表达式必须能够符合接口中定义的抽象方法,从参数、返回值,到异常都必须匹配。

//     1. lambda完整版是  (参数) ----> {代码块}
//     2. lambda可以由返回值,使用return语句就可以,当然我们接口没有,所有lambda表达式也不能有
//     3. lambda可以使用外部数据,看着和匿名内部类是一样的


//     使用lambda表达式实现list内容的打印

//        myList.forEach((s) -> {processString(outside + s);});

//      简化版,去掉参数的() 和 方法体的{}
//
//        myList.forEach(s -> processString(outside + s));
//
//
////      如果无外部变量可以使用类名::方法名的方式来实现
//        myList.forEach(IterateListLambdaAppMain::processString);
//
////      非静态方法,可以使用实例来调用
//        IterateListLambdaAppMain inst = new IterateListLambdaAppMain();
//        myList.forEach(inst::processStringInst);

//        lambda允许一个指定参数类型里的一个方法作为方法的引用
//        myList.forEach(String::toUpperCase);



//      hashMap的用法
        Map<String, String> myMap = new HashMap<>();
        myMap.put("k1", "v1");
        myMap.put("k2", "v2");
        myMap.put("k3", "v3");

//        myMap.forEach((k,v) -> processTwoStrings(k,v));
//      或者这种写法
        myMap.forEach(IterateListLambdaAppMain::processTwoStrings);



    }


    public static List<String> addElementToList(List<String> list) {
        for(int i = 0; i < 10; i++) {
            list.add("str" + (i % 5));
        }

        return list;
    }

    private static void processString(String str) {
        System.out.println(str);
    }

    private static void processTwoStrings(String str1, String str2) {
        System.out.println("s1=" + str1 + ", s2=" + str2);
    }

    private void processStringInst(String str) {
        System.out.println(str);
    }
}

相关文章

网友评论

      本文标题:33、Lambda(一)

      本文链接:https://www.haomeiwen.com/subject/qhndjltx.html