jdk1.8 lamdba表达式常用示例

本文介绍了Java 8 Lambda表达式的应用场景,包括条件过滤集合、去重操作、集合转逗号分隔字符串以及对象集合提取Map。Lambda表达式简化了代码,提高了并行计算效率,但也有其局限性,如不能直接debug。文章通过实例展示了如何避免在使用过程中出现的常见错误。

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

 

别考虑太多,直接去做就好!管它成败!

lamdba实际应用中,常针对集合进行操作,代表未来的趋势,慢慢的会替代所有的for循环操作。

它的优点:代码简介、容易并行计算、递归算法快。

缺点:不能debug、强制类型转换支持不好。

1、条件过滤集合

@Test
    public void testLamdba(){
		List<String> aList = Arrays.asList("aa", "bb", "cc", "dd", "ee");
		/**
		 * aList根据条件 剔除元素
		 * 旧方式,迭代器遍历aList
		 * 新方式,流式语法
		 * 常用于基本数据类型集合
		 * stream()转换为文件流
		 * filter 过滤操作返回值为boolean
		 * collect转换对象操作
		 */
		List<String>  bList = aList.stream().filter(str -> !str.equals("aa")).collect(Collectors.toList());
		System.out.println("过滤前集合:"+aList);
		System.out.println("过滤后集合:"+bList);

		/**
		 * 复杂操作过滤或转换集合操作
		 * 常用于对象集合操作。
		 * map 操作流,返回集合元素对象,定义局部变量str,函数体针对str做操作。
		 */
		aList.add(null);
		List<String> cList = aList.stream().filter(str -> !StringUtils.isEmpty(str)).map(str -> {
			if(str.length()>2){
				return str;
			}else{
				return str+"123";
			}
		}).filter(Objects::nonNull).collect(Collectors.toList());
		System.out.println("过滤后集合:"+cList);
	}

注意:我经常见到有很多人一个错误写法(阿里的也很多),把filter写在map()后面用来过滤空,但是如果集合对象有空,在map()方法就直接空指针了。这点需要注意,如果要过滤map方法返回值,那么后面可以再用一个filter方法。

输出结果:

过滤前集合:[aa, bb, cc, dd, ee]
过滤后集合:[bb, cc, dd, ee]
过滤后集合:[aa123, bb123, cc123, dd123, ee123]

2、去重操作 

在1.8之前,对于基本元素,可以根据set集合不能重复的特性,list转set保持唯一。对于对象,需要重写hashcode()和equals()方法保持唯一。jdk1.8可以使用流式语法实现。同样的集合对象元素也需要重写hashcode()和equals()方法。

        /**
		 * 处理重复元素
		 * distinct 
		 */
		aList.add("aa");
		aList.add("bb");
		aList.add("cc");
		System.out.println("处理重复前:"+aList);
		List<String> dList = aList.stream().filter(str -> !StringUtils.isEmpty(str)).distinct().collect(Collectors.toList());
		System.out.println("处理重复后:"+dList);

输出结果

处理重复前:[aa, bb, cc, dd, ee, null, aa, bb, cc]
处理重复后:[aa, bb, cc, dd, ee]

3、集合转逗号分隔字符串

@Test
	public void testJoinString(){
		List<String> list = Arrays.asList("AA", "BB", "CC", "BB", "CC", "AA", "AA");
		/**
		 * 集合转换字符串
		 * distinct方法 去除重复数据
		 * collect方法 主要用来返回对应转换结果。
		 */
		String str = list.stream().distinct().collect(Collectors.joining(","));
		System.out.println(str);
	}

输出结果:

AA,BB,CC

4、对象集合提取map集合

@Test
	public void testListToMap(){
		List<StudentA> sList = Lists.newArrayList();
		sList.add(new StudentA("san","12"));
		sList.add(new StudentA("si","13"));
		sList.add(new StudentA("sam","11"));
		/**
		 * 提取list集合元素,组成对应的map集合
		 * 运用collect方法,方法体内进行转换操作
		 */
		Map<String,String> sMap = sList.stream().collect(Collectors.toMap(StudentA::getName,StudentA::getAge));
		System.out.println(sMap);
	}

输出结果:{san=12, si=13, sam=11}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值