Java 8 lambda表达式引入详解及实例

发布时间 - 2026-01-11 01:27:22    点击率:

Java 8 lambda表达式引入详解及实例

eclipse 下载安装

Help -> EclipseMarketplace -> 搜索Java 8 Kepler ->Java 8 support for eclipse Kepler SR2 安装完成后需要重启

Android Studio

在project的build.gradle文件中添加

buildscript {
  dependencies {
    classpath 'me.tatarka:gradle-retrolambda:3.2.5'
  }
}

在app的build.gradle文件中添加

apply plugin: 'me.tatarka.retrolambda'

android {
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

 

使用

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.Stream.Builder;
 
public class LambdaTest {
 
 public static void main(String[] args) {
 
  String[] str = new String[] { "Lambdas", "Lambdas", "Default Method", "Stream API", "Date and Time API" };
  List<String> strList = Arrays.asList(str);
 
  System.out.println("----------------------------> 默认遍历");
  strList.stream().forEach(item -> {
   System.out.println(item);
  });
  System.out.println("----------------------------> 默认遍历简化写法");
  strList.stream().forEach(System.out::println);
 
  // limit输出指定个数
  System.out.println("limit ---------------------------->");
  strList.stream().limit(2).forEach(System.out::println);
 
  // 去掉重复数据
  System.out.println("distinct ---------------------------->");
  strList.stream().distinct().forEach(System.out::println);
 
  // filter过滤器,筛选出符合条件的值
  System.out.println("filter ---------------------------->");
  Predicate<String> contain = item -> item.contains("API");// 只是用于匹配条件的如int可以用条件运算符等
  strList.stream().filter(contain).forEach(System.out::println);
  System.out.println("filter简化写法 ---------------------------->");
  strList.stream().filter(item -> item.contains("API")).forEach(System.out::println);
 
  System.out.println("AND ---------------------------->");
  Predicate<String> contain1 = item -> item.contains("API");
  Predicate<String> contain2 = item -> item.contains("Time");
  strList.stream().filter(contain1.and(contain2)).forEach(System.out::println);
  System.out.println("OR ---------------------------->");
  strList.stream().filter(contain1.or(contain2)).forEach(System.out::println);
 
  // 向每个字符后追加
  System.out.println("map ---------------------------->");
  // 对Stream中包含的元素使用给定的转换函数进行转换操作,生成的Stream只包含转换生成的元素。
  // mapToInt,mapToLong和mapToDouble是对int、long、double进行操作的
  strList.stream().map(item -> item + String.valueOf(1)).forEach(System.out::println);
 
  // 向每个字符后追加
  System.out.println("flatMap ---------------------------->");
  // flatMap:和map类似,不同的是其每个元素转换得到的是Stream对象,会把子Stream中的元素压缩到父集合
  strList.stream().flatMap(item -> getCharacter(item)).forEach(System.out::println);
 
  System.out.println("peek ---------------------------->");
  // peek 需调用collect
  strList.stream().map(String::toUpperCase).peek(System.out::println).collect(Collectors.toList());
 
  System.out.println("skip ---------------------------->");
  // 丢弃原Stream的前N个元素后剩下元素组成的新Stream
  strList.stream().skip(3).forEach(System.out::println);
 
  // 统计个数
  System.out.println("count ---------------------------->" + strList.stream().count());
 
  // allMatch:是不是Stream中的所有元素都满足给定的匹配条件
  boolean allMatch1 = strList.stream().allMatch(item -> item.contains("a"));
  System.out.println("allMatch --------------> " + allMatch1);
  boolean allMatch2 = strList.stream().allMatch(item -> item.contains("API"));
  System.out.println("allMatch --------------> " + allMatch2);
 
  // anyMatch:Stream中是否存在任何一个元素满足匹配条件
  boolean anyMatch1 = strList.stream().anyMatch(item -> item.contains("Stream API"));
  System.out.println("anyMatch --------------> " + anyMatch1);
  boolean anyMatch2 = strList.stream().anyMatch(item -> item.contains("Stream API1"));
  System.out.println("anyMatch --------------> " + anyMatch2);
 
  // findFirst: 返回Stream中的第一个元素,如果Stream为空,返回空Optional
  Optional<String> findFirst = strList.stream().findFirst();
  // isPresent方法用来检查Optional实例是否有值。
  if (findFirst.isPresent()) {
   // 调用get()返回Optional值。如果Optional没有值调和则抛出NoSuchElementException。
   System.out.println("findFirst --------------> " + findFirst.get());
  }
  System.out.print("findFirst简化写法 --------------> ");
  // 如果存在值,则使用该值调用,否则不执行任何操作。
  strList.stream().findFirst().ifPresent(System.out::println);
 
  // noneMatch:是不是Stream中的所有元素都不满足给定的匹配条件
  boolean noneMatch1 = strList.stream().noneMatch(item -> item.contains("Stream API"));
  System.out.println("noneMatch --------------> " + noneMatch1);
  boolean noneMatch2 = strList.stream().noneMatch(item -> item.contains("zzzzz"));
  System.out.println("noneMatch --------------> " + noneMatch2);
 
  System.out.println("newStrList ---------------------------->");
  List<String> newStrList = strList.stream().filter(item -> item != null)
    .collect(() -> new ArrayList<String>(), (list, item) -> list.add(item), (list1, list2) -> list1.addAll(list2));
  newStrList.stream().forEach(System.out::println);
  System.out.println("newStrList简化写法 ---------------------------->");
  List<String> newStrList1 = strList.stream().filter(item -> item != null).collect(Collectors.toList());
  newStrList1.stream().forEach(System.out::println);
 
  System.out.println("sorted 排序---------------------------->");
  // strList.stream().sorted();
  strList.stream().sorted(Comparator.comparing(String::length)).forEach(System.out::println);
  ;
 
  // max和min:使用给定的比较器(Operator),返回Stream中的最大|最小值
  Integer[] ints = new Integer[] { 7, 2, 3, 10, 5, 1, 6, 8, 9, 4 };
  List<Integer> intList = new ArrayList<Integer>();
  intList = Arrays.asList(ints);
  System.out.print("max --------------> ");
  intList.stream().max((o1, o2) -> o1.compareTo(o2)).ifPresent(System.out::println);
  System.out.print("max简化写法 --------------> ");
  // Comparable<Integer> Integer.compare(int arg0, int arg1)
  intList.stream().max(Integer::compare).ifPresent(System.out::println);
  System.out.print("min --------------> ");
  intList.stream().min((o1, o2) -> o1.compareTo(o2)).ifPresent(System.out::println);
  System.out.print("min简化写法 --------------> ");
  // Comparable<Integer> Integer.compare(int arg0, int arg1)
  intList.stream().min(Integer::compare).ifPresent(System.out::println);
 
  System.out.println("reduce单参数 ---------------------------->");
  System.out.println(intList.stream().reduce((result, element) -> result = result + element));
  System.out.println("reduce双参数 ---------------------------->");
  System.out.println(intList.stream().reduce(0, (result, element) -> result = result + element));
 
  System.out.println("generate ---------------------------->");
  // 生成一个无限长度的Stream,其中值是随机的。这个无限长度Stream是懒加载,一般这种无限长度的Stream都会配合Stream的limit()方法来用。
  Stream.generate(Math::random).limit(2).forEach(System.out::println);
 
  System.out.println("iterate ---------------------------->");
  // 也是生成无限长度的Stream,和generator不同的是,其元素的生成是重复对给定的种子值,调用用户指定函数来生成的
  Stream.iterate(12, item -> item + 1).limit(2).forEach(System.out::println);
 }
 
 public static Stream<String> getCharacter(String s) {
  Builder<String> builder = Stream.builder();
  builder.add(s);
  builder.accept("1");
  return builder.build();
 }
}
  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Java  # 8  # lambda表达式引入及简单使用  # lambda表达式  # Java8新特性lambda表达式有什么用(用法实例)  # Java8新特性之Lambda表达式浅析  # Java8 Lambda表达式详解及实例  # Java8中lambda表达式的应用及一些泛型相关知识  # Java8 新特性Lambda表达式实例详解  # Java8中的 Lambda表达式教程  # Java8新特性之lambda的作用_动力节点Java学院整理  # Java 8 动态类型语言Lambda表达式实现原理解析  # Java8新特性之lambda(动力节点Java学院整理)  # Java8深入学习系列(一)lambda表达式介绍  # 的是  # 遍历  # 都不  # 第一个  # 可以用  # 希望能  # 任何一个  # 谢谢大家  # 重启  # 抛出  # 符合条件  # 是否存在  # 为空  # 来用  # 运算符  # 最小值  # 安装完成后  # 加载  # static  # String 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  原生JS实现图片轮播切换效果  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  Mybatis 中的insertOrUpdate操作  如何用花生壳三步快速搭建专属网站?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何在阿里云通过域名搭建网站?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  详解Android中Activity的四大启动模式实验简述  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  使用spring连接及操作mongodb3.0实例  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel如何实现多对多模型关联?(Eloquent教程)  如何在万网自助建站平台快速创建网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  用yum安装MySQLdb模块的步骤方法  如何用虚拟主机快速搭建网站?详细步骤解析  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel Fortify是什么,和Jetstream有什么关系  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  长沙企业网站制作哪家好,长沙水业集团官方网站?  Android 常见的图片加载框架详细介绍  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  如何登录建站主机?访问步骤全解析  nodejs redis 发布订阅机制封装实现方法及实例代码