Lambda表达式的语法

一、Lambda表达式的基础语法:Java8中引进了一个新的操作符"->",该操作符称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分成两部分

左侧:Lambda表达式的参数列表,对应要实现的抽象方法的参数列表
右侧:Lambda表达式所需执行的功能,即Lambda体,是对接口抽象方法的功能实现(这样就需要函数式接口)

  • 语法格式一:无参数,无返回值(抽象方法)
    ()->System.out.println(“Hello Lambda!”);
@Test
	public void test1() {
		int num=0;//jdl 1.7之前,必须是final
		
		Runnable r=new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("Hello word!"+num);
			}
		};
		r.run();
		
		System.out.println("*************************");
		
		Runnable r1=()->System.out.println("Hello Lambda!"+num);
		//实现Runnable接口的run抽象方法,这里的Runnable接口是函数式接口,即接口中只有一个抽象方法的接口
		r1.run();
	}
  • 语法格式二:有一个参数,无返回值
    (x)->System.out.println(x);
@Test
	public void test2() {
		Consumer<String> con=(x)->System.out.println(x);
		con.accept("kkkkkkkkkkkk");
	}
  • 语法格式三:若只有一个参数,小括号可以不写,但习惯上写 x->System.out.println(x);

  • 语法格式四:有两个及以上的参数,有返回值,并且Lambda体中有多条语句
    (x,y)->{System.out.println(“多条语句”);
    return Integer.compare(x, y);
    };

@Test 
	public void test4() {
		Comparator<Integer> com=(x,y)->{
			System.out.println("多条语句");
			return Integer.compare(x, y);
		};
	}
  • 语法格式五:若Lambda体中只有一条语句,return和大括号都可以省略不写 (x,y)->Integer.compare(x, y);
@Test 
	public void test5() {
		Comparator<Integer> com=(x,y)->Integer.compare(x, y);
	}
  • 语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器能通过上下文推断出数据类型,即“类型推断”
public void test6() {
		//类型推断
		String [] strings={"aaa","bbb","ccc"};
		//分开写就会出错,因为JVM不能通过上下文推断类型
		
		List<String> list=new ArrayList<>();//后面的尖括号不用写类型,因为可以通过前面推断出数据类型
		
		show(new HashMap<>());//可以推断出集合里元素的数据类型
	}
	
	public void show(Map<String, Integer> map) {
		
	}

二、Lambda表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口。可以使用注解@FunctionalInterface修饰,可以检查是否是函数式接口

@FunctionalInterface
public interface MyPredicate <T>{
	public boolean test(T t);

}

有了@FunctionalInterface修饰之后,接口就只能写一个抽象方法,不然会出错。

写一个程序练习一下

//需求:对一个数进行运算
	@Test
	public void test7() {
		Integer num=operation(100, (x)->x*x);
		System.out.println(num);
		
		System.out.println(operation(200, (y)->y+100));
	}
	
	public Integer operation(Integer num,MyFun mf) {
		return mf.getValue(num);
	}
@FunctionalInterface
public interface MyFun {
	
	public Integer getValue(Integer num);

}
### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值