Lambda实现排序

public class TestComparator {
	
	public static void main(String[] args) {
		List<DateDTO> dateList = new ArrayList<>();
		DateDTO dateDTO1 = new DateDTO();
		dateDTO1.setDate(DateUtil.stringToDate("2018-01-27"));
		DateDTO dateDTO2 = new DateDTO();
		dateDTO2.setDate(DateUtil.stringToDate("2018-01-25"));
		DateDTO dateDTO3 = new DateDTO();
		dateDTO3.setDate(DateUtil.stringToDate("2018-01-26"));
		dateList.add(dateDTO1);
		dateList.add(dateDTO2);
		dateList.add(dateDTO3);
		
		//按照日期升序排序
		Comparator<DateDTO> comparator = (DateDTO d1,DateDTO d2) -> d1.getDate().compareTo(d2.getDate());
		Collections.sort(dateList, comparator);
		dateList.forEach(d ->{
			System.out.println(DateUtil.dateToString(d.getDate()));
		});
	}
}

输出结果:

2018-01-25
2018-01-26
2018-01-27


在编程中,Lambda 表达式可以用于对数据字段进行排序,尤其在处理列表或集合时非常常见。以下是在不同编程语言中使用 Lambda 表达式对字段进行排序实现方法。 ### Java 中使用 Lambda 表达式对字段排序 Java 中可以使用 `List.sort()` 方法结合 Lambda 表达式来对对象的字段进行排序。例如,针对一个包含 `Student` 对象的列表,可以通过 Lambda 表达式指定排序的字段(如姓名): ```java final List<Student> students = Lists.newArrayList( new Student("Tom", 10), new Student("Jerry", 12) ); students.sort((h1, h2) -> h1.getName().compareTo(h2.getName())); ``` 上述代码中,通过 `(h1, h2) -> h1.getName().compareTo(h2.getName())` 这个 Lambda 表达式定义了两个 `Student` 对象之间的比较逻辑[^1]。这种写法简化了排序逻辑,并提高了代码的可读性。 如果排序逻辑较为复杂,建议将该逻辑抽取为单独的方法,并在 Lambda 表达式中引用该方法,以保持代码清晰和易于维护[^2]。 ### Python 中使用 Lambda 表达式对字段排序 Python 提供了内置函数 `sorted()` 和列表的 `sort()` 方法,都可以接受 Lambda 表达式作为 `key` 参数来指定排序依据的字段。例如,对于一个包含字典的列表,可以通过 Lambda 表达式按某个字段排序: ```python a = [ {'name': 'Bill', 'age': 40}, {'name': 'Mike', 'age': 12}, {'name': 'Johb', 'age': 29} ] # 按照年龄升序排列 print(sorted(a, key=lambda x: x['age'])) # [{'name': 'Mike', 'age': 12}, {'name': 'Johb', 'age': 29}, {'name': 'Bill', 'age': 40}] # 按照年龄降序排列 a.sort(key=lambda x: x['age'], reverse=True) print(a) # [{'name': 'Bill', 'age': 40}, {'name': 'Johb', 'age': 29}, {'name': 'Mike', 'age': 12}] ``` 以上代码展示了如何利用 Lambda 表达式分别实现升序和降序排列[^3]。 ### Java 中使用 Function 接口与 Lambda 结合 除了排序之外,在 Java 中还可以结合 `Function` 接口与 Lambda 表达式实现更灵活的数据处理。例如,可以根据传入的字符串参数转换为对应的数值表示: ```java Function<String, Integer> function = gender -> gender.equals("male") ? 1 : 0; function.apply("male"); // 输出 1 ``` 虽然这并非直接用于排序,但类似的思路可以扩展到排序场景中,例如根据性别字段进行分组排序[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值