lambda表达式排序
lambda表达式排序简洁
1.给一个字符串数组:
String[] atp = {"2016-06-28 08:00:00", "2017-12-05 19:17:32","2017-03-06 22:14:51","2016-12-28 08:00:00", "2017-03-05 19:17:32","2017-03-06 22:14:51"};
打印结果如图所示:
2016-06-28 08:00:00
2017-12-05 19:17:32
2017-03-06 22:14:51
2016-12-28 08:00:00
2017-03-05 19:17:32
2017-03-06 22:14:51
2.通过lambda对数组排序:
Arrays.sort(atp, (String s1, String s2) -> (s1.compareTo(s2)));//Lambdas排序集合
打印结果:
2016-06-28 08:00:00
2016-12-28 08:00:00
2017-03-05 19:17:32
2017-03-06 22:14:51
2017-03-06 22:14:51
2017-12-05 19:17:32
3.lambda对list集合排序
定义一个对象:
public static class People {
private String date; public People(String date) {
this.date = date;
} public String getDate() {
return date;
} public void setDate(String date) {
this.date = date;
} @Override
public String toString() {
return "People{" +
"date='" + date + '\'' +
'}';
}
}
将字符串数组加到对象中,并排序:
for(String str: atp){
list.add(new People(str));
}
//------------------集合排序--------------------
//1.在java8之前,给list排序需要使用实现java.util.Comparator接口的匿名类:
Collections.sort(
list,
new Comparator<People>() {
public int compare(People p1, People p2){
return p1.getDate().compareTo(p2.getDate());
}
}
);
//2.java8开始可以使用lambda表达式替换匿名类。注意左边的参数p1、p2在编译时自动推导:
Collections.sort(list, (p1, p2) -> p1.getDate().compareTo(p2.getDate()));
//3.这个例子使用Comparator.comparing 和 ::双冒号可以简单表示:
Collections.sort(list, Comparator.comparing(People::getDate));
list.forEach(people->{
System.out.println(people.getDate());
});
lambda对于map按ASCII排序:
//map排序
Map<String, Integer> map = new HashMap();
map.put("349",12);
map.put("329",13);
map.put("6",14);
map.put("399",15);
map.put("99",16);
map = map.entrySet()
.stream()
.sorted(Map.Entry.<String, Integer>comparingByKey()) //comparingByValue ,comparingByKey排出来的329 、6 ......
.collect(Collectors.toMap(k -> k.getKey(), v -> v.getValue(),
(k, v) -> k, LinkedHashMap::new));
######lambda对对象属性排序:
升序:
List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
降序:
List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());
lambda表达式排序的更多相关文章
- vector 使用 c++11 Lambda 表达式 排序
struct SIndexDataNew { 1 optional short shtMarket; 2 optional string sCode; 3 optional int iDate; 4 ...
- C# List用Lambda表达式排序
降序: lstroot.Sort((x,y)=>y.static_count.CompareTo(x.static_count)); 升序: lstroot.Sort((x,y)=>x.s ...
- C# 中使用Linq和Lambda表达式对List<T>进行排序
C#中List<T>排序的两种方法 List<Student> stu = (List<Student>)Session["StudentList&quo ...
- 为什么使用Lambda表达式(翻译版)
简介 如上图所示,绿色框中就是Lambda表达式,是可以执行的代码块.Lambda表达式是很多编程语言的特征,比如Lisp, Python, Scala等. 但是对于java,在8以后才支持这种写法. ...
- Java8:使用Lambda表达式增强版Comparator排序
学习路上的自我记录-------路好长,就问你慌不慌,大声港,不慌.----jstarseven. 实体类: package com.server.model; /** * Created by js ...
- Java8:Lambda表达式增强版Comparator和排序
1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式——特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...
- List的定制排序 包括使用lambda表达式来实现的方法
1.先实现Comparator的接口 重写compare方法 根据比较大小来返回数值: 比如:(Integer o1 - Integer o2); return 1 表示o1>o2; re ...
- lambda表达式在解决java后台分组排序时的应用
需求:按照起始日期查询出数据库里一段连续日期的住院信息. 问题:数据库里的住院信息可能不是完整的,也就是在给出的日期区间里只有若干天的数据,缺少某些日期的数据. 解决: 1.需要我们先按日期分组查出数 ...
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- DedeCMS V5.7 SP2前台文件上传漏洞(CVE-2018-20129)
DedeCMS V5.7 SP2前台文件上传漏洞(CVE-2018-20129) 一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2版本中的 ...
- 自定义FutureTask实现
FutureTask FutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果.通过get()方法来获取异步任务的 ...
- Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置
Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置 系统:Windows7 使用软件: Maven3.0.3 + Eclipse Indigo ...
- 从原理层面掌握@ModelAttribute的使用(使用篇)【一起学Spring MVC】
每篇一句 每个人都应该想清楚这个问题:你是祖师爷赏饭吃的,还是靠老天爷赏饭吃的 前言 上篇文章 描绘了@ModelAttribute的核心原理,这篇聚焦在场景使用上,演示@ModelAttribute ...
- 自己实现spring核心功能 二
前言 上一篇我们讲了spring的一些特点并且分析了需要实现哪些功能,已经把准备工作都做完了,这一篇我们开始实现具体功能. 容器加载过程 我们知道,在spring中refesh()方法做了很多初始化的 ...
- Window服务基于Quartz.Net组件实现定时任务调度(二)
前言: 在上一章中,我们通过利用控制台实现定时任务调度,已经大致了解了如何基于Quartz.Net组件实现任务,至少包括三部分:job(作业),trigger(触发器),scheduler(调度器). ...
- RuntimeError: one of the variables needed for gradient computation has been modified by an inplace
vgg里面的 ReLU默认的参数inplace=True 当我们调用vgg结构的时候注意 要将inplace改成 False 不然会报错 RuntimeError: one of the variab ...
- 从零写一个编译器(十一):代码生成之Java字节码基础
项目的完整代码在 C2j-Compiler 前言 第十一篇,终于要进入代码生成部分了,但是但是在此之前,因为我们要做的是C语言到字节码的编译,所以自然要了解一些字节码,但是由于C语言比较简单,所以只需 ...
- Redis的常用命令与Java整合及高级应用篇
一,redis是什么? 首先数据库分为关系型数据库和非关系型数据库,关系型数据库是采用关系模型来组织数据的数据库,简单来说就是二维表格模型,同时保证事务的一致性. 相反非关系型数据库采用key ...
- ASP.NET Core 中的 ServiceProvider
前言 在 ASP.NET Core 中,微软提供了一套默认的依赖注入实现,该实现对应的包为:Microsoft.Extensions.DependencyInjection,我们可以通过查看其对应的开 ...