[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"cat-java8":85,"catposts-java8":97,"post-detail-post-java8-stream-match-efe9648c":502},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":89,"status":94,"postCount":96},{"name":87,"creationTimestamp":88},"java8","2026-09-12T08:22:34.154837Z",{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},"Java 8 新特性教程","\u002Fupload\u002Ftutorial-cover-java8.png","Java 8 新特性教程：Lambda、Stream API、Optional、新日期时间 API 与函数式编程。",false,{"permalink":95,"postCount":96,"visiblePostCount":96},"\u002Fcategories\u002Fjava8",20,[98,122,142,162,182,202,222,242,262,282,302,322,342,362,382,402,422,442,462,482],{"metadata":99,"spec":102,"status":113,"categories":117},{"name":100,"creationTimestamp":101},"post-java8-timezones-d136f398","2026-09-12T08:29:44.759663Z",{"title":103,"slug":104,"cover":105,"excerpt":106,"publishTime":108,"categories":109,"tags":110,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Timezones 时区","java8-timezones","",{"raw":107,"autoGenerate":93},"ZoneId 代表时区类。通过静态工厂方法方便地获取它，入参我们可以传入某个时区编码。另外，时区类还定义了一个偏移量，用来在当前时刻或某时间\r\n与目标时区时间之间进行转换。","2026-09-12T08:29:44.816682Z",[87],[],"PUBLIC",true,{"permalink":114,"excerpt":107,"lastModifyTime":115,"phase":116},"\u002Farchives\u002Fjava8-timezones","2026-09-12T08:29:44.762611Z","PUBLISHED",[118],{"metadata":119,"spec":120,"status":121,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":123,"spec":126,"status":134,"categories":137},{"name":124,"creationTimestamp":125},"post-java8-supplier-effd6dc5","2026-09-12T08:29:44.154617Z",{"title":127,"slug":128,"cover":105,"excerpt":129,"publishTime":131,"categories":132,"tags":133,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Supplier 函数式接口","java8-supplier",{"raw":130,"autoGenerate":93},"Supplier 接口代表一个不接受参数但返回结果的操作。它在 Java 中被广泛用于懒加载或产生随机值等场景。","2026-09-12T08:29:44.212836Z",[87],[],{"permalink":135,"excerpt":130,"lastModifyTime":136,"phase":116},"\u002Farchives\u002Fjava8-supplier","2026-09-12T08:29:44.157805Z",[138],{"metadata":139,"spec":140,"status":141,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":143,"spec":146,"status":154,"categories":157},{"name":144,"creationTimestamp":145},"post-java8-stream-sorted-2177586c","2026-09-12T08:29:43.450940Z",{"title":147,"slug":148,"cover":105,"excerpt":149,"publishTime":151,"categories":152,"tags":153,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Stream 流 Sorted 排序","java8-stream-sorted",{"raw":150,"autoGenerate":93},"在 Java 1.8 中，Stream API 提供了 sorted() 方法用于对流中的元素进行排序。sorted() 方法可以根据元素的自然顺序（如果元素实现了 Comparable 接口）或者根据指定的比较器进行排序。","2026-09-12T08:29:43.515927Z",[87],[],{"permalink":155,"excerpt":150,"lastModifyTime":156,"phase":116},"\u002Farchives\u002Fjava8-stream-sorted","2026-09-12T08:29:43.454014Z",[158],{"metadata":159,"spec":160,"status":161,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":163,"spec":166,"status":174,"categories":177},{"name":164,"creationTimestamp":165},"post-java8-stream-reduce-d9c374ef","2026-09-12T08:29:42.530843Z",{"title":167,"slug":168,"cover":105,"excerpt":169,"publishTime":171,"categories":172,"tags":173,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Stream 流 Reduce 规约合并","java8-stream-reduce",{"raw":170,"autoGenerate":93},"在 Java 1.8 中，Stream API 提供了 reduce() 方法用于将流中的元素进行归约操作。reduce() 方法允许我们根据指定的操作，将流中的元素合并为一个结果。","2026-09-12T08:29:42.734409Z",[87],[],{"permalink":175,"excerpt":170,"lastModifyTime":176,"phase":116},"\u002Farchives\u002Fjava8-stream-reduce","2026-09-12T08:29:42.534055Z",[178],{"metadata":179,"spec":180,"status":181,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":183,"spec":186,"status":194,"categories":197},{"name":184,"creationTimestamp":185},"post-java8-stream-match-efe9648c","2026-09-12T08:29:41.833057Z",{"title":187,"slug":188,"cover":105,"excerpt":189,"publishTime":191,"categories":192,"tags":193,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Stream 流 Match 元素匹配","java8-stream-match",{"raw":190,"autoGenerate":93},"在 Java 1.8 中，Stream API 提供了 allMatch()、anyMatch() 和 noneMatch() 方法用于对流中的元素进行匹配操作。这些方法可以帮助我们快速判断流中的元素是否满足某个条件，从而返回一个布尔值。","2026-09-12T08:29:41.891265Z",[87],[],{"permalink":195,"excerpt":190,"lastModifyTime":196,"phase":116},"\u002Farchives\u002Fjava8-stream-match","2026-09-12T08:29:41.836386Z",[198],{"metadata":199,"spec":200,"status":201,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":203,"spec":206,"status":214,"categories":217},{"name":204,"creationTimestamp":205},"post-java8-stream-filter-932481d2","2026-09-12T08:29:40.916371Z",{"title":207,"slug":208,"cover":105,"excerpt":209,"publishTime":211,"categories":212,"tags":213,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Stream 流 Filter 过滤","java8-stream-filter",{"raw":210,"autoGenerate":93},"在 Java 1.8 中，Stream 是一个用于操作集合元素的新 API。Stream API 提供了丰富的功能，其中之一就是 filter() 方法。filter() 方法可以用于过滤集合中的元素，根据指定的条件筛选出满足条件的元素，从而得到一个新的流。","2026-09-12T08:29:40.976437Z",[87],[],{"permalink":215,"excerpt":210,"lastModifyTime":216,"phase":116},"\u002Farchives\u002Fjava8-stream-filter","2026-09-12T08:29:40.919654Z",[218],{"metadata":219,"spec":220,"status":221,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":223,"spec":226,"status":234,"categories":237},{"name":224,"creationTimestamp":225},"post-java8-stream-count-67639222","2026-09-12T08:29:40.075806Z",{"title":227,"slug":228,"cover":105,"excerpt":229,"publishTime":231,"categories":232,"tags":233,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Stream 流 Count 计数","java8-stream-count",{"raw":230,"autoGenerate":93},"在 Java 1.8 中，Stream API 提供了 count() 方法用于计算流中的元素个数。count() 方法返回一个 long 类型的值，表示流中元素的数量。","2026-09-12T08:29:40.133568Z",[87],[],{"permalink":235,"excerpt":230,"lastModifyTime":236,"phase":116},"\u002Farchives\u002Fjava8-stream-count","2026-09-12T08:29:40.078976Z",[238],{"metadata":239,"spec":240,"status":241,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":243,"spec":246,"status":254,"categories":257},{"name":244,"creationTimestamp":245},"post-java8-predicate-a40f5246","2026-09-12T08:29:39.401754Z",{"title":247,"slug":248,"cover":105,"excerpt":249,"publishTime":251,"categories":252,"tags":253,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Predicate 断言函数式接口","java8-predicate",{"raw":250,"autoGenerate":93},"在 Java 1.8 之前，我们在对集合进行筛选和过滤时，通常需要使用循环和条件语句来手动实现。而 Java 1.8 引入的 Predicate 断言接口，为我们提供了一种简单且优雅的方法来进行集合元素的筛选。","2026-09-12T08:29:39.462661Z",[87],[],{"permalink":255,"excerpt":250,"lastModifyTime":256,"phase":116},"\u002Farchives\u002Fjava8-predicate","2026-09-12T08:29:39.404668Z",[258],{"metadata":259,"spec":260,"status":261,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":263,"spec":266,"status":274,"categories":277},{"name":264,"creationTimestamp":265},"post-java8-map-convert-c4312a2d","2026-09-12T08:29:38.790451Z",{"title":267,"slug":268,"cover":105,"excerpt":269,"publishTime":271,"categories":272,"tags":273,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Stream 流 Map 元素转换","java8-map-convert",{"raw":270,"autoGenerate":93},"在 Java 1.8 中，Stream API 提供了 map() 方法用于对流中的元素进行转换操作。map() 方法可以将流中的每个元素映射为另一个值，从而得到一个新的流。","2026-09-12T08:29:38.847401Z",[87],[],{"permalink":275,"excerpt":270,"lastModifyTime":276,"phase":116},"\u002Farchives\u002Fjava8-map-convert","2026-09-12T08:29:38.793548Z",[278],{"metadata":279,"spec":280,"status":281,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":283,"spec":286,"status":294,"categories":297},{"name":284,"creationTimestamp":285},"post-java8-localtime-95207726","2026-09-12T08:29:38.133376Z",{"title":287,"slug":288,"cover":105,"excerpt":289,"publishTime":291,"categories":292,"tags":293,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 LocalTime 时间","java8-localtime",{"raw":290,"autoGenerate":93},"在 Java 8 之前，我们通常使用 java.util.Date 类和 java.util.Calendar 类来表示和操作日期和时间。然而，这些类存在许多问题，例如不支持时区，API 设计不直观等。为了解决这些问题，Java 8 引入了全新的日期和时间 API，其中包括 LocalTime 类。","2026-09-12T08:29:38.188501Z",[87],[],{"permalink":295,"excerpt":290,"lastModifyTime":296,"phase":116},"\u002Farchives\u002Fjava8-localtime","2026-09-12T08:29:38.136869Z",[298],{"metadata":299,"spec":300,"status":301,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":303,"spec":306,"status":314,"categories":317},{"name":304,"creationTimestamp":305},"post-java8-localdatetime-95f2a0ee","2026-09-12T08:29:37.466020Z",{"title":307,"slug":308,"cover":105,"excerpt":309,"publishTime":311,"categories":312,"tags":313,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 LocalDateTime 日期时间","java8-localdatetime",{"raw":310,"autoGenerate":93},"LocalDateTime 是 Java 8 中一个不可变的日期-时间对象，它表示了日期（年、月、日）和时间（小时、分钟、秒），但不包含时区。","2026-09-12T08:29:37.520571Z",[87],[],{"permalink":315,"excerpt":310,"lastModifyTime":316,"phase":116},"\u002Farchives\u002Fjava8-localdatetime","2026-09-12T08:29:37.469233Z",[318],{"metadata":319,"spec":320,"status":321,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":323,"spec":326,"status":334,"categories":337},{"name":324,"creationTimestamp":325},"post-java8-localdate-2407e273","2026-09-12T08:29:36.753368Z",{"title":327,"slug":328,"cover":105,"excerpt":329,"publishTime":331,"categories":332,"tags":333,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 LocalDate 日期","java8-localdate",{"raw":330,"autoGenerate":93},"LocalDate 是 Java 8 中用于处理日期的不可变类，它只包含日期部分（年、月、日），没有时间和时区。","2026-09-12T08:29:36.847631Z",[87],[],{"permalink":335,"excerpt":330,"lastModifyTime":336,"phase":116},"\u002Farchives\u002Fjava8-localdate","2026-09-12T08:29:36.756533Z",[338],{"metadata":339,"spec":340,"status":341,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":343,"spec":346,"status":354,"categories":357},{"name":344,"creationTimestamp":345},"post-java8-lambda-access-variables-970cbd1d","2026-09-12T08:29:35.499263Z",{"title":347,"slug":348,"cover":105,"excerpt":349,"publishTime":351,"categories":352,"tags":353,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Lambda 访问局部变量","java8-lambda-access-variables",{"raw":350,"autoGenerate":93},"在 Lambda 表达式中，我们可以访问外部的 final 类型变量，如下面的示例代码...","2026-09-12T08:29:35.598483Z",[87],[],{"permalink":355,"excerpt":350,"lastModifyTime":356,"phase":116},"\u002Farchives\u002Fjava8-lambda-access-variables","2026-09-12T08:29:35.502061Z",[358],{"metadata":359,"spec":360,"status":361,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":363,"spec":366,"status":374,"categories":377},{"name":364,"creationTimestamp":365},"post-java8-lambda-access-member-var-and-static-var-fb2278de","2026-09-12T08:29:34.640284Z",{"title":367,"slug":368,"cover":105,"excerpt":369,"publishTime":371,"categories":372,"tags":373,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Lambda 访问成员变量和静态变量","java8-lambda-access-member-var-and-static-var",{"raw":370,"autoGenerate":93},"上一章节中，了解了如何在 Lambda 表达式中访问局部变量。与局部变量相比，在 Lambda 表达式中对成员变量和静态变量拥有读写权限...","2026-09-12T08:29:34.692814Z",[87],[],{"permalink":375,"excerpt":370,"lastModifyTime":376,"phase":116},"\u002Farchives\u002Fjava8-lambda-access-member-var-and-static-var","2026-09-12T08:29:34.643687Z",[378],{"metadata":379,"spec":380,"status":381,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":383,"spec":386,"status":394,"categories":397},{"name":384,"creationTimestamp":385},"post-java8-lambda-access-interface-default-method-2dad0242","2026-09-12T08:29:34.031524Z",{"title":387,"slug":388,"cover":105,"excerpt":389,"publishTime":391,"categories":392,"tags":393,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Lambda 访问接口的默认方法","java8-lambda-access-interface-default-method",{"raw":390,"autoGenerate":93},"本小节中，我们将学习 Java 1.8 中如何在 Lambda 中访问接口的默认方法...","2026-09-12T08:29:34.082356Z",[87],[],{"permalink":395,"excerpt":390,"lastModifyTime":396,"phase":116},"\u002Farchives\u002Fjava8-lambda-access-interface-default-method","2026-09-12T08:29:34.034351Z",[398],{"metadata":399,"spec":400,"status":401,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":403,"spec":406,"status":414,"categories":417},{"name":404,"creationTimestamp":405},"post-java8-function-63dfbe63","2026-09-12T08:29:33.411024Z",{"title":407,"slug":408,"cover":105,"excerpt":409,"publishTime":411,"categories":412,"tags":413,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Function 函数式接口","java8-function",{"raw":410,"autoGenerate":93},"当 Java 1.8 引入函数式接口时，Function 成为了其中一个重要的接口。Function 接口代表一个接受一个参数并且产生结果的操作。它在 Java 中被广泛用于函数式编程以及 Stream API 中的转换操作。","2026-09-12T08:29:33.468397Z",[87],[],{"permalink":415,"excerpt":410,"lastModifyTime":416,"phase":116},"\u002Farchives\u002Fjava8-function","2026-09-12T08:29:33.413849Z",[418],{"metadata":419,"spec":420,"status":421,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":423,"spec":426,"status":434,"categories":437},{"name":424,"creationTimestamp":425},"post-java8-consumer-f342cdbd","2026-09-12T08:29:32.773097Z",{"title":427,"slug":428,"cover":105,"excerpt":429,"publishTime":431,"categories":432,"tags":433,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Consumer 消费者函数式接口","java8-consumer",{"raw":430,"autoGenerate":93},"Consumer 接口代表一个接受一个参数并且不返回结果的操作。它在 Java 中被广泛用于遍历集合或执行消费型操作。","2026-09-12T08:29:32.831051Z",[87],[],{"permalink":435,"excerpt":430,"lastModifyTime":436,"phase":116},"\u002Farchives\u002Fjava8-consumer","2026-09-12T08:29:32.776825Z",[438],{"metadata":439,"spec":440,"status":441,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":443,"spec":446,"status":454,"categories":457},{"name":444,"creationTimestamp":445},"post-java8-comparator-7c6e8711","2026-09-12T08:29:32.075441Z",{"title":447,"slug":448,"cover":105,"excerpt":449,"publishTime":451,"categories":452,"tags":453,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Comparator 比较函数式接口","java8-comparator",{"raw":450,"autoGenerate":93},"Comparator 接口常用于比较操作，它在集合排序、搜索、自定义排序等场景中提供了灵活的比较策略。","2026-09-12T08:29:32.168878Z",[87],[],{"permalink":455,"excerpt":450,"lastModifyTime":456,"phase":116},"\u002Farchives\u002Fjava8-comparator","2026-09-12T08:29:32.078744Z",[458],{"metadata":459,"spec":460,"status":461,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":463,"spec":466,"status":474,"categories":477},{"name":464,"creationTimestamp":465},"post-java8-clock-336b78c3","2026-09-12T08:29:31.395365Z",{"title":467,"slug":468,"cover":105,"excerpt":469,"publishTime":471,"categories":472,"tags":473,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 Clock","java8-clock",{"raw":470,"autoGenerate":93},"Clock 提供对当前日期和时间的访问。我们可以利用它来替代 System.currentTimeMillis() 方法。另外，通过 clock.instant() 能够获取一个 instant 实例...","2026-09-12T08:29:31.447789Z",[87],[],{"permalink":475,"excerpt":470,"lastModifyTime":476,"phase":116},"\u002Farchives\u002Fjava8-clock","2026-09-12T08:29:31.398896Z",[478],{"metadata":479,"spec":480,"status":481,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":483,"spec":486,"status":494,"categories":497},{"name":484,"creationTimestamp":485},"post-java8-bifunction-e5cfa561","2026-09-12T08:29:30.804052Z",{"title":487,"slug":488,"cover":105,"excerpt":489,"publishTime":491,"categories":492,"tags":493,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},"Java 1.8 BiFunction 函数式接口","java8-bifunction",{"raw":490,"autoGenerate":93},"BiFunction 接口代表一个接受两个参数并产生结果的操作。它在 Java 中**被广泛用于对两个输入参数进行操作，然后返回一个结果。","2026-09-12T08:29:30.861518Z",[87],[],{"permalink":495,"excerpt":490,"lastModifyTime":496,"phase":116},"\u002Farchives\u002Fjava8-bifunction","2026-09-12T08:29:30.807504Z",[498],{"metadata":499,"spec":500,"status":501,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":503,"spec":504,"status":508,"categories":509,"content":514},{"name":184,"creationTimestamp":185},{"title":187,"slug":188,"cover":105,"excerpt":505,"publishTime":191,"categories":506,"tags":507,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":112},{"raw":190,"autoGenerate":93},[87],[],{"permalink":195,"excerpt":190,"lastModifyTime":196,"phase":116},[510],{"metadata":511,"spec":512,"status":513,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":90,"slug":87,"cover":91,"description":92,"priority":27,"hideFromList":93,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"content":515,"raw":515},"\u003Cp>在 Java 1.8 中，Stream API 提供了 \u003Ccode>allMatch()\u003C\u002Fcode>、\u003Ccode>anyMatch()\u003C\u002Fcode> 和 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法 \u003Cstrong>用于对流中的元素进行匹配操作\u003C\u002Fstrong>。这些方法可以帮助我们快速判断流中的元素是否满足某个条件，从而返回一个布尔值。\u003C\u002Fp>\n\u003Cp>本小节将深入介绍 Java 1.8 中的 Stream 的 match 方法，并通过示例代码演示如何使用它们。\u003C\u002Fp>\n\u003Ch2>match 方法概览\u003C\u002Fh2>\n\u003Cp>在 Stream API 中，\u003Ccode>match\u003C\u002Fcode>  方法用于判断流中的元素是否满足某个条件。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>boolean allMatch(Predicate&lt;? super T&gt; predicate)\nboolean anyMatch(Predicate&lt;? super T&gt; predicate)\nboolean noneMatch(Predicate&lt;? super T&gt; predicate)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>allMatch()\u003C\u002Fcode> 方法用于判断流中的所有元素是否都满足指定的条件。\u003C\u002Fli>\n\u003Cli>\u003Ccode>anyMatch()\u003C\u002Fcode> 方法用于判断流中的任意元素是否满足指定的条件。\u003C\u002Fli>\n\u003Cli>\u003Ccode>noneMatch()\u003C\u002Fcode> 方法用于判断流中的所有元素是否都不满足指定的条件。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>使用 match 方法\u003C\u002Fh2>\n\u003Cp>让我们通过几个示例来说明如何使用 \u003Ccode>match\u003C\u002Fcode> 方法。\u003C\u002Fp>\n\u003Ch3>示例 1：判断列表中是否所有元素都大于 10\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>List&lt;Integer&gt; numbers = Arrays.asList(12, 15, 18, 9, 11);\n\n\u002F\u002F 使用 allMatch() 方法判断列表中是否所有元素都大于 10\nboolean allGreaterThanTen = numbers.stream()\n                                   .allMatch(num -&gt; num &gt; 10);\n\nSystem.out.println(&quot;All elements greater than 10: &quot; + allGreaterThanTen); \u002F\u002F 输出 &quot;All elements greater than 10: false&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在这个例子中，我们首先创建一个整数列表 \u003Ccode>numbers\u003C\u002Fcode>。然后，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将列表转换为 Stream 对象，再使用 \u003Ccode>allMatch()\u003C\u002Fcode> 方法判断列表中是否所有元素都大于 10。\u003C\u002Fp>\n\u003Ch3>示例 2：判断列表中是否有元素等于 15\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>List&lt;Integer&gt; numbers = Arrays.asList(12, 15, 18, 9, 11);\n\n\u002F\u002F 使用 anyMatch() 方法判断列表中是否有元素等于 15\nboolean hasElementFifteen = numbers.stream()\n                                   .anyMatch(num -&gt; num == 15);\n\nSystem.out.println(&quot;Has element equals to 15: &quot; + hasElementFifteen); \u002F\u002F 输出 &quot;Has element equals to 15: true&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在这个例子中，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将列表转换为 Stream 对象，再使用 \u003Ccode>anyMatch()\u003C\u002Fcode> 方法判断列表中是否有元素等于 15。\u003C\u002Fp>\n\u003Ch3>示例 3：判断列表中是否没有元素小于 0\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>List&lt;Integer&gt; numbers = Arrays.asList(12, 15, 18, 9, 11);\n\n\u002F\u002F 使用 noneMatch() 方法判断列表中是否没有元素小于 0\nboolean noneLessThanZero = numbers.stream()\n                                  .noneMatch(num -&gt; num &lt; 0);\n\nSystem.out.println(&quot;None element less than 0: &quot; + noneLessThanZero); \u002F\u002F 输出 &quot;None element less than 0: true&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在这个例子中，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将列表转换为 Stream 对象，再使用 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法判断列表中是否没有元素小于 0。\u003C\u002Fp>\n\u003Ch2>自定义条件\u003C\u002Fh2>\n\u003Cp>在使用 \u003Ccode>allMatch()\u003C\u002Fcode>、\u003Ccode>anyMatch()\u003C\u002Fcode> 和 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法时，你可以根据需要自定义条件，对流中的元素进行更复杂的匹配判断。自定义条件需要传入一个实现了 \u003Ccode>Predicate\u003C\u002Fcode> 接口的匿名函数或 Lambda 表达式。\u003C\u002Fp>\n\u003Ch3>示例：自定义条件\u003C\u002Fh3>\n\u003Cp>假设我们有一个字符串列表，现在想要判断列表中的字符串是否都包含小写字母。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>List&lt;String&gt; words = Arrays.asList(&quot;apple&quot;, &quot;Banana&quot;, &quot;cherry&quot;);\n\n\u002F\u002F 使用 allMatch() 方法自定义条件，判断列表中的字符串是否都包含小写字母\nboolean allContainLowerCase = words.stream()\n                                  .allMatch(word -&gt; word.matches(&quot;.*[a-z].*&quot;));\n\nSystem.out.println(&quot;All words contain lower case: &quot; + allContainLowerCase); \u002F\u002F 输出 &quot;All words contain lower case: false&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在这个例子中，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将字符串列表转换为 Stream 对象，再使用 \u003Ccode>allMatch()\u003C\u002Fcode> 方法自定义条件，判断列表中的字符串是否都包含小写字母。\u003Ccode>matches(&quot;.*[a-z].*&quot;)\u003C\u002Fcode> 是一个正则表达式，用于判断字符串中是否包含小写字母。因此，这里的自定义条件是判断字符串是否都包含小写字母。\u003C\u002Fp>\n\u003Cp>你可以根据实际需求编写更复杂的自定义条件，如判断字符串是否满足特定的格式、对象是否满足特定的属性要求等等。\u003C\u002Fp>\n\u003Ch2>总结\u003C\u002Fh2>\n\u003Cp>Java 1.8 中的 Stream API 提供了 \u003Ccode>allMatch()\u003C\u002Fcode>、\u003Ccode>anyMatch()\u003C\u002Fcode> 和 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法，用于对流中的元素进行匹配判断。通过使用这些方法，你可以快速判断流中的元素是否满足某个条件，并得到一个布尔值。\u003C\u002Fp>\n13:T4337,\u003Cp>在 Java 1.8 中，Stream API 提供了 \u003Ccode>allMatch()\u003C\u002Fcode>、\u003Ccode>anyMatch()\u003C\u002Fcode> 和 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法 \u003Cstrong>用于对流中的元素进行匹配操作\u003C\u002Fstrong>。这些方法可以帮助我们快速判断流中的元素是否满足某个条件，从而返回一个布尔值。\u003C\u002Fp>\n\u003Cp>本小节将深入介绍 Java 1.8 中的 Stream 的 match 方法，并通过示例代码演示如何使用它们。\u003C\u002Fp>\n\u003Ch2 id=\"toc-0\">match 方法概览\u003C\u002Fh2>\n\u003Cp>在 Stream API 中，\u003Ccode>match\u003C\u002Fcode>  方法用于判断流中的元素是否满足某个条件。\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"boolean%20allMatch(Predicate%3C%3F%20super%20T%3E%20predicate)%0Aboolean%20anyMatch(Predicate%3C%3F%20super%20T%3E%20predicate)%0Aboolean%20noneMatch(Predicate%3C%3F%20super%20T%3E%20predicate)%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> \u003Cspan class=\"token function\">allMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Predicate\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token operator\">?\u003C\u002Fspan> \u003Cspan class=\"token keyword\">super\u003C\u002Fspan> \u003Cspan class=\"token class-name\">T\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> predicate\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> \u003Cspan class=\"token function\">anyMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Predicate\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token operator\">?\u003C\u002Fspan> \u003Cspan class=\"token keyword\">super\u003C\u002Fspan> \u003Cspan class=\"token class-name\">T\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> predicate\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> \u003Cspan class=\"token function\">noneMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Predicate\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token operator\">?\u003C\u002Fspan> \u003Cspan class=\"token keyword\">super\u003C\u002Fspan> \u003Cspan class=\"token class-name\">T\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> predicate\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cul>\n\u003Cli>\u003Ccode>allMatch()\u003C\u002Fcode> 方法用于判断流中的所有元素是否都满足指定的条件。\u003C\u002Fli>\n\u003Cli>\u003Ccode>anyMatch()\u003C\u002Fcode> 方法用于判断流中的任意元素是否满足指定的条件。\u003C\u002Fli>\n\u003Cli>\u003Ccode>noneMatch()\u003C\u002Fcode> 方法用于判断流中的所有元素是否都不满足指定的条件。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"toc-1\">使用 match 方法\u003C\u002Fh2>\n\u003Cp>让我们通过几个示例来说明如何使用 \u003Ccode>match\u003C\u002Fcode> 方法。\u003C\u002Fp>\n\u003Ch3 id=\"toc-2\">示例 1：判断列表中是否所有元素都大于 10\u003C\u002Fh3>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"List%3CInteger%3E%20numbers%20%3D%20Arrays.asList(12%2C%2015%2C%2018%2C%209%2C%2011)%3B%0A%0A%2F%2F%20%E4%BD%BF%E7%94%A8%20allMatch()%20%E6%96%B9%E6%B3%95%E5%88%A4%E6%96%AD%E5%88%97%E8%A1%A8%E4%B8%AD%E6%98%AF%E5%90%A6%E6%89%80%E6%9C%89%E5%85%83%E7%B4%A0%E9%83%BD%E5%A4%A7%E4%BA%8E%2010%0Aboolean%20allGreaterThanTen%20%3D%20numbers.stream()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.allMatch(num%20-%3E%20num%20%3E%2010)%3B%0A%0ASystem.out.println(%22All%20elements%20greater%20than%2010%3A%20%22%20%2B%20allGreaterThanTen)%3B%20%2F%2F%20%E8%BE%93%E5%87%BA%20%22All%20elements%20greater%20than%2010%3A%20false%22%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> numbers \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Arrays\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">asList\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">12\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">15\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">18\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">9\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">11\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token comment\">\u002F\u002F 使用 allMatch() 方法判断列表中是否所有元素都大于 10\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> allGreaterThanTen \u003Cspan class=\"token operator\">=\u003C\u002Fspan> numbers\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">stream\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n                                   \u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">allMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>num \u003Cspan class=\"token operator\">->\u003C\u002Fspan> num \u003Cspan class=\"token operator\">>\u003C\u002Fspan> \u003Cspan class=\"token number\">10\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"All elements greater than 10: \"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> allGreaterThanTen\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan> \u003Cspan class=\"token comment\">\u002F\u002F 输出 \"All elements greater than 10: false\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>在这个例子中，我们首先创建一个整数列表 \u003Ccode>numbers\u003C\u002Fcode>。然后，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将列表转换为 Stream 对象，再使用 \u003Ccode>allMatch()\u003C\u002Fcode> 方法判断列表中是否所有元素都大于 10。\u003C\u002Fp>\n\u003Ch3 id=\"toc-3\">示例 2：判断列表中是否有元素等于 15\u003C\u002Fh3>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"List%3CInteger%3E%20numbers%20%3D%20Arrays.asList(12%2C%2015%2C%2018%2C%209%2C%2011)%3B%0A%0A%2F%2F%20%E4%BD%BF%E7%94%A8%20anyMatch()%20%E6%96%B9%E6%B3%95%E5%88%A4%E6%96%AD%E5%88%97%E8%A1%A8%E4%B8%AD%E6%98%AF%E5%90%A6%E6%9C%89%E5%85%83%E7%B4%A0%E7%AD%89%E4%BA%8E%2015%0Aboolean%20hasElementFifteen%20%3D%20numbers.stream()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.anyMatch(num%20-%3E%20num%20%3D%3D%2015)%3B%0A%0ASystem.out.println(%22Has%20element%20equals%20to%2015%3A%20%22%20%2B%20hasElementFifteen)%3B%20%2F%2F%20%E8%BE%93%E5%87%BA%20%22Has%20element%20equals%20to%2015%3A%20true%22%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> numbers \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Arrays\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">asList\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">12\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">15\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">18\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">9\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">11\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token comment\">\u002F\u002F 使用 anyMatch() 方法判断列表中是否有元素等于 15\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> hasElementFifteen \u003Cspan class=\"token operator\">=\u003C\u002Fspan> numbers\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">stream\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n                                   \u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">anyMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>num \u003Cspan class=\"token operator\">->\u003C\u002Fspan> num \u003Cspan class=\"token operator\">==\u003C\u002Fspan> \u003Cspan class=\"token number\">15\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"Has element equals to 15: \"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> hasElementFifteen\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan> \u003Cspan class=\"token comment\">\u002F\u002F 输出 \"Has element equals to 15: true\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>在这个例子中，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将列表转换为 Stream 对象，再使用 \u003Ccode>anyMatch()\u003C\u002Fcode> 方法判断列表中是否有元素等于 15。\u003C\u002Fp>\n\u003Ch3 id=\"toc-4\">示例 3：判断列表中是否没有元素小于 0\u003C\u002Fh3>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"List%3CInteger%3E%20numbers%20%3D%20Arrays.asList(12%2C%2015%2C%2018%2C%209%2C%2011)%3B%0A%0A%2F%2F%20%E4%BD%BF%E7%94%A8%20noneMatch()%20%E6%96%B9%E6%B3%95%E5%88%A4%E6%96%AD%E5%88%97%E8%A1%A8%E4%B8%AD%E6%98%AF%E5%90%A6%E6%B2%A1%E6%9C%89%E5%85%83%E7%B4%A0%E5%B0%8F%E4%BA%8E%200%0Aboolean%20noneLessThanZero%20%3D%20numbers.stream()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.noneMatch(num%20-%3E%20num%20%3C%200)%3B%0A%0ASystem.out.println(%22None%20element%20less%20than%200%3A%20%22%20%2B%20noneLessThanZero)%3B%20%2F%2F%20%E8%BE%93%E5%87%BA%20%22None%20element%20less%20than%200%3A%20true%22%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">Integer\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> numbers \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Arrays\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">asList\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token number\">12\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">15\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">18\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">9\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token number\">11\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token comment\">\u002F\u002F 使用 noneMatch() 方法判断列表中是否没有元素小于 0\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> noneLessThanZero \u003Cspan class=\"token operator\">=\u003C\u002Fspan> numbers\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">stream\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n                                  \u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">noneMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>num \u003Cspan class=\"token operator\">->\u003C\u002Fspan> num \u003Cspan class=\"token operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"token number\">0\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"None element less than 0: \"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> noneLessThanZero\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan> \u003Cspan class=\"token comment\">\u002F\u002F 输出 \"None element less than 0: true\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>在这个例子中，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将列表转换为 Stream 对象，再使用 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法判断列表中是否没有元素小于 0。\u003C\u002Fp>\n\u003Ch2 id=\"toc-5\">自定义条件\u003C\u002Fh2>\n\u003Cp>在使用 \u003Ccode>allMatch()\u003C\u002Fcode>、\u003Ccode>anyMatch()\u003C\u002Fcode> 和 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法时，你可以根据需要自定义条件，对流中的元素进行更复杂的匹配判断。自定义条件需要传入一个实现了 \u003Ccode>Predicate\u003C\u002Fcode> 接口的匿名函数或 Lambda 表达式。\u003C\u002Fp>\n\u003Ch3 id=\"toc-6\">示例：自定义条件\u003C\u002Fh3>\n\u003Cp>假设我们有一个字符串列表，现在想要判断列表中的字符串是否都包含小写字母。\u003C\u002Fp>\n\u003Cdiv class=\"language-java\" data-ext=\"java\" data-code=\"List%3CString%3E%20words%20%3D%20Arrays.asList(%22apple%22%2C%20%22Banana%22%2C%20%22cherry%22)%3B%0A%0A%2F%2F%20%E4%BD%BF%E7%94%A8%20allMatch()%20%E6%96%B9%E6%B3%95%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9D%A1%E4%BB%B6%EF%BC%8C%E5%88%A4%E6%96%AD%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%98%AF%E5%90%A6%E9%83%BD%E5%8C%85%E5%90%AB%E5%B0%8F%E5%86%99%E5%AD%97%E6%AF%8D%0Aboolean%20allContainLowerCase%20%3D%20words.stream()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.allMatch(word%20-%3E%20word.matches(%22.*%5Ba-z%5D.*%22))%3B%0A%0ASystem.out.println(%22All%20words%20contain%20lower%20case%3A%20%22%20%2B%20allContainLowerCase)%3B%20%2F%2F%20%E8%BE%93%E5%87%BA%20%22All%20words%20contain%20lower%20case%3A%20false%22%0A\">\n        \u003Cbutton class=\"vp-copy-code-button\" data-copy data-copied=\"已复制\" aria-label=\"复制代码\">\u003C\u002Fbutton>\n        \u003Cpre>\u003Ccode class=\"language-java\">\u003Cspan class=\"token class-name\">List\u003C\u002Fspan>\u003Cspan class=\"token generics\">\u003Cspan class=\"token punctuation\">&lt;\u003C\u002Fspan>\u003Cspan class=\"token class-name\">String\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">>\u003C\u002Fspan>\u003C\u002Fspan> words \u003Cspan class=\"token operator\">=\u003C\u002Fspan> \u003Cspan class=\"token class-name\">Arrays\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">asList\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"apple\"\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">\"Banana\"\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">,\u003C\u002Fspan> \u003Cspan class=\"token string\">\"cherry\"\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token comment\">\u002F\u002F 使用 allMatch() 方法自定义条件，判断列表中的字符串是否都包含小写字母\u003C\u002Fspan>\n\u003Cspan class=\"token keyword\">boolean\u003C\u002Fspan> allContainLowerCase \u003Cspan class=\"token operator\">=\u003C\u002Fspan> words\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">stream\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\n                                  \u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">allMatch\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>word \u003Cspan class=\"token operator\">->\u003C\u002Fspan> word\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">matches\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\".*[a-z].*\"\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan>\n\n\u003Cspan class=\"token class-name\">System\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>out\u003Cspan class=\"token punctuation\">.\u003C\u002Fspan>\u003Cspan class=\"token function\">println\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">(\u003C\u002Fspan>\u003Cspan class=\"token string\">\"All words contain lower case: \"\u003C\u002Fspan> \u003Cspan class=\"token operator\">+\u003C\u002Fspan> allContainLowerCase\u003Cspan class=\"token punctuation\">)\u003C\u002Fspan>\u003Cspan class=\"token punctuation\">;\u003C\u002Fspan> \u003Cspan class=\"token comment\">\u002F\u002F 输出 \"All words contain lower case: false\"\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n      \u003C\u002Fdiv>\n\u003Cp>在这个例子中，我们使用 \u003Ccode>stream()\u003C\u002Fcode> 方法将字符串列表转换为 Stream 对象，再使用 \u003Ccode>allMatch()\u003C\u002Fcode> 方法自定义条件，判断列表中的字符串是否都包含小写字母。\u003Ccode>matches(&quot;.*[a-z].*&quot;)\u003C\u002Fcode> 是一个正则表达式，用于判断字符串中是否包含小写字母。因此，这里的自定义条件是判断字符串是否都包含小写字母。\u003C\u002Fp>\n\u003Cp>你可以根据实际需求编写更复杂的自定义条件，如判断字符串是否满足特定的格式、对象是否满足特定的属性要求等等。\u003C\u002Fp>\n\u003Ch2 id=\"toc-7\">总结\u003C\u002Fh2>\n\u003Cp>Java 1.8 中的 Stream API 提供了 \u003Ccode>allMatch()\u003C\u002Fcode>、\u003Ccode>anyMatch()\u003C\u002Fcode> 和 \u003Ccode>noneMatch()\u003C\u002Fcode> 方法，用于对流中的元素进行匹配判断。通过使用这些方法，你可以快速判断流中的元素是否满足某个条件，并得到一个布尔值。\u003C\u002Fp>"]