JDK27中的Set.ofLazy

前言

Set.ofLazy是JDK 27 预览特性 JEP 531:Lazy Constants,该方法用于创建一个惰性不可变 Set 。与传统的 Set.of() 在创建时立即初始化所有元素不同,Set.ofLazy() 允许将"元素是否存在于集合中"或"元素的计算"延迟到首次访问时才执行。

Set.ofLazy使用

csharp 复制代码
public class SetOfLazyDemo {

    static void main() {
        AtomicInteger calls = new AtomicInteger();

        // 只保留长度 > 3 的名字;谓词不会在构造时执行
        Set<String> users = Set.ofLazy(Set.of("alice", "bob", "charlie"), name -> {
            calls.incrementAndGet();
            return name.length() > 3;
        });

        System.out.println("构造后谓词执行次数: " + calls.get());             // 0:惰性,啥都没算
        System.out.println("contains("bob"): " + users.contains("bob")); // false:只判定 bob 一次
        System.out.println("谓词执行次数: " + calls.get());                  // 1
        System.out.println(users);                                          // 含 alice/charlie,顺序不保证(Set.of 无序)
        System.out.println("最终谓词执行次数: " + calls.get());              // 3:每元素至多一次
    }
}

输出结果为

总结

JDK27提供了Set.ofLazy,但是目前该特性属于预览阶段,可以先试试看咋样,目前不建议在生产环境使用

相关推荐
文丑颜不良啊15 分钟前
LeetCode2841~2860题目解析
java·leetcode
小南家的青蛙16 分钟前
Tomcat与Jetty深度对比
java·tomcat·jetty
乌暮2 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
YDS8292 小时前
Small Spring IOC篇:容器事件及其监听器
java·spring
金銀銅鐵2 小时前
带您看懂字节码指令(三):一行加法里有什么
java·jvm
文丑颜不良啊2 小时前
LeetCode2921~2940题目解析
java·leetcode
我不会起名字3222 小时前
未接入最终读上限的参数:`websocketMaxMsgLen` 与 12.5 倍差距
后端·websocket·go·即时通讯·im·故障排查
一条Go3 小时前
接收方合并去重:同一个人为什么只该收到一次通知
后端·架构·github
北漂人Java3 小时前
基于 Spring AI Alibaba WorkFlow 构建 Java 生产级 AI Agent
java·人工智能·spring