• Java在循环中中使用lambda需要注意项


    Java在循环中中使用lambda需要注意项

    lambda表达式在jvm运行时会转换成Class进而生成其对象
    先说结论:
    在写lambda表达式时,若使用到上下文中的值且值不是final修饰的基础类型和字符串时, 则程序每次执行到lambda时都会新生成一个对象

    测试代码:

    lambda表达式中未使用上下文变量,lambda生成的对应地址一样

    // lambda表达式中未使用上下文变量,lambda生成的对应地址一样
    Map<Integer, List<String>> map = new HashMap<>(16);
    for (int i = 0; i < 10; i++) {
        Function<Integer, List<String>> function = (k) -> {
            List<String> list = new ArrayList<>();
            return list;
        };
        System.out.println("address: " + function);
        map.computeIfAbsent(i, function);
    }
    

    lambda表达式中使用final修饰的基础类型变量,String, lambda不会每一次都生成新的对象

    Map<Integer, List<String>> map = new HashMap<>(16);
    // lambda表达式中使用final修饰的基础类型变量,String lambda不会每一次都生成新的对象
    final int size = 10;
    final String str = "sss";
    for (int i = 0; i < 10; i++) {
        Function<Integer, List<String>> function = (k) -> {
            List<String> list = new ArrayList<>(size);
            list.add(str);
            return list;
        };
        System.out.println("address: " + function);
        map.computeIfAbsent(i, function);
    }
    
    
    

    lambda表达式中使用上下文中中使用final修饰其他对象包括包装类都会每次生成新的对象

    Map<Integer, List<Object>> map = new HashMap<>(16);
    // 基本类型封装类使用
    //        final int size = 10;
    //        final String str = "sss";
    final Integer integer = Integer.parseInt("12");
    final Object o = new Object();
    for (int i = 0; i < 10; i++) {
        Function<Integer, List<Object>> function = (k) -> {
        List<Object> list = new ArrayList<>(integer);
    //  list.add(str);
    //  list.add(o);
        list.add(integer);
        return list;
        };
        System.out.println("address: " + function);
        map.computeIfAbsent(i, function);
    }
    

    参考文档:https://cloud.tencent.com/developer/article/1572212?ivk_sa=1024320u

  • 相关阅读:
    [转]Extundelete--数据恢复软件
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/annamaple/p/16185527.html
Copyright © 2020-2023  润新知