lambda表达式示例讲解

本文通过实例展示了Java 8中Lambda表达式的多种应用场景,包括列表处理、匿名内部类、排序、过滤、数据计算等,并探讨了其优点与局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近由于使用elasticsearch版本更新到5.0了,看到5.0版本源码中使用了很多的lambda表达式,于是就上网找资料简单研究一下,以下就通过代码示例来说明其用法,这也是最通俗易懂的表达方式了(个人对lambda表达式并不是很看好,确实能简化代码,但是后期不易于维护,调试起来也不方便):

它的基本语法为:参数 -> 表达式 或者 参数 -> 语句

1.使用lambda表达式对列表进行处理:

public class LambdaListTest {

	public static void main(String[] args) {
		List<String> lambdaList = new ArrayList<String>();
		lambdaList.add("lbj");
		lambdaList.add("wade");
		lambdaList.add("paul");
		
		//未使用lambda表达式的循环方式
		for(String name : lambdaList){
			System.out.println(name);
		}
		
		//使用lambda表达式的循环方式
		lambdaList.forEach((name) -> System.out.println(name));
	}
	
}

2.匿名内部类的lambda表达式使用:

public class LambdaAnonyTest {

	public static void main(String[] args) {
		//未使用lambda表达式的匿名内部类使用
		Runnable run1 = new Runnable() {
			@Override
			public void run() {
				System.out.println("未使用lambda表达式");
			}
		};
		//使用lambda表达式的匿名内部类使用
		Runnable run2 = () -> System.out.println("使用lambda表达式");
		
		run1.run();
		run2.run();
	}

}

3.使用lambda表达式排序:

public class LambdaSortTest {

	public static void main(String[] args) {
		String[] sportsArr = {"basketball","swimming","running"};
		//未使用lambda表达式排序
		Arrays.sort(sportsArr, new Comparator<String>() {
			@Override
			public int compare(String arg0, String arg1) {
				return arg0.compareTo(arg1);
			}
			
		});
		//使用lambda表达式排序
		Arrays.sort(sportsArr, ((String s1,String s2) -> (s1.compareTo(s2))));
	}

}

4.使用lambda表达式的predicate过滤列表信息:

public class LambdaPredicateTest {

	public static void main(String[] args) {
		//使用lambda表达式的predicate过滤列表中符合条件的信息
		//可以使用and过滤多个信息,也可以使用or
		List<Integer> prediList = new ArrayList<Integer>();
		prediList.add(21);
		prediList.add(1);
		prediList.add(22);
		
		Predicate<Integer> stat1 = (num) -> num > 20;
		Predicate<Integer> stat2 = (num) -> num < 30;
		
		prediList.stream().filter(stat1.and(stat2)).forEach((num) -> System.out.println(num));
	}

}

5.使用lambda的map方法进行数据计算:

public class LambdaMapTest {

	public static void main(String[] args) {
		List<Integer> salaryList = new ArrayList<Integer>();
		salaryList.add(1000);
		salaryList.add(1500);
		salaryList.add(1200);
		//未使用lambda表达式的map方法进行数据计算
		for(int salary : salaryList){
			double newSalary = salary + 0.2 * salary;
			System.out.println(newSalary);
		}
		//使用lambda表达式的map方法进行数据计算
		salaryList.stream().map((salary) -> salary + 0.2 * salary).forEach(System.out::println);
	}

}

6.使用lambda的collect方法返回列表或者其他想要的信息:

public class LambdaCollectTest {

	public static void main(String[] args) {
		List<String> langList = new ArrayList<String>();
		langList.add("java");
		langList.add("php");
		langList.add("c");
		//利用lambda表达创建一个String列表
		List<String> filterList = langList.stream().filter(lang -> lang.length() > 3).collect(Collectors.toList());
		System.out.println(filterList);
		//利用lambda表达式处理列表中的信息之后并且拼接
		String upperStr = langList.stream().map(lang -> lang.toUpperCase()).collect(Collectors.joining("-"));
		System.out.println(upperStr);
	}

}

7.使用lambda计算最大,最小,平均值等等:

public class LambdaStatisticTest {
	public static void main(String[] args) {
		//使用lambda表达式计算集合中元素的最大值等等
		List<Integer> testList = Arrays.asList(2,3,5,11,8,29,99);
		IntSummaryStatistics stat = testList.stream().mapToInt((num) -> num).summaryStatistics();
		System.out.println("max:" + stat.getMax());
		System.out.println("min:" + stat.getMin());
		System.out.println("sum:" + stat.getSum());
		System.out.println("average:" + stat.getAverage());
	}
}

总结:

lambda表达式确实使得代码简单清晰了很多,而且看起来也高大上了很多;但是由于lambda表达式是jdk1.8之后才引入的,而使用jdk1.8一起的版本的开发者还大有人在,所以个人感觉还没有完全普及,可读性不是很强,语法也相对比较复杂。

但是,不管如何lambda表达式也是jdk1.8的强大功能之一,作为java开发者,我们理应去研究下他,即使没有用到他。


欢迎大家一起交流技术。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值