当前位置:网站首页>Functional interface, method reference, list collection sorting gadget implemented by lambda
Functional interface, method reference, list collection sorting gadget implemented by lambda
2022-07-04 15:25:00 【Humanoid bug maker 9527】
1. stay Java8 A functional interface is introduced in Consumer The object of , This object can pass methods as parameters .
About lambda A tutorial for
/** * Collection sorting */
@AllArgsConstructor
public class CollSort {
// Sorting factor
private final Long order;
public final static CollSort DESC = new CollSort(-1L);
public final static CollSort ASC = new CollSort(1L);
// Sort by number
public <E> Collection<E> sort(Collection<E> collection, ProcessorNumber<E> getParam) {
return collection.stream()
.filter(Objects::nonNull)
.sorted((o1, o2) -> {
// The incoming abstract method is executed here , And pass in the parameters required by the function method ,
// getParam The return value of has been determined in the abstract function method
long result = Long.parseLong(String.valueOf(getParam.accept(o1))) - Long.parseLong(String.valueOf(getParam.accept(o2)));
result = result * order; // Ranking coefficient intervention
return result == 0 ? 0 : result < 0 ? -1 : 1;
})
.collect(Collectors.toList());
}
// Sort by time
public <E> Collection<E> sort(Collection<E> collection, ProcessorDate<E> getParam) {
return collection.stream()
.filter(Objects::nonNull) // Invalid data filtering
.sorted((o1, o2) -> {
long t1 = getParam.accept(o1).getTime(); // Here are abstract methods getParam The return value of has been determined in the abstract function method
long t2 = getParam.accept(o2).getTime();
long result = t1 - t2;
result = result * order; // Ranking coefficient intervention
return result == 0 ? 0 : result < 0 ? -1 : 1;
})
.collect(Collectors.toList());
}
}
@FunctionalInterface
interface ProcessorDate<E> {
/** * Abstract function method to obtain the time attribute of the object * * @param t object * @return The time property of the object */
Date accept(E t);
}
@FunctionalInterface
interface ProcessorNumber<E> {
/** * Abstract function method to obtain the numerical attributes of an object * * @param t object * @return Numerical properties of objects */
Number accept(E t);
}
Use
public static void main(String[] args) {
SortTest sortTest = new SortTest();
ArrayList<User> users = new ArrayList<>();
users.add(new User("zz", 14,new Date()));
users.add(new User("zz", 17,new Date(System.currentTimeMillis()+1000000)));
users.add(new User("zz", 11,new Date(System.currentTimeMillis()+4000000)));
users.add(new User("zz", 15,new Date(System.currentTimeMillis()+9000000)));
users.add(new User("zz", 21,new Date(System.currentTimeMillis()+8000000)));
users.add(new User("zz", 7,new Date(System.currentTimeMillis()+3000000)));
sortTest.test(users);
}
public void test(List<User> users) {
// Just call ordinary tool methods , The difference is that the parameter is a method , You can also directly reference methods
Collection<User> ageSort = CollSort.ASC.sort(users, User::getAge);
System.out.println(" Age ranking =========================");
ageSort.forEach(System.out::println);
System.out.println(" Birthday sorting ======================");
Collection<User> timeSort = CollSort.DESC.sort(users, User::getBirthDay);
timeSort.forEach(System.out::println);
}
effect
You can expand the function interface according to your needs , We need to pay attention to Parameter type
and return type
, Most of the time, it is enough to change the return value type ;
Parameter types and return value types affect the parameters that need to be passed in when calling this function method , And response value
边栏推荐
- 音视频技术开发周刊 | 252
- LeetCode 1184. Distance between bus stops -- vector clockwise and counterclockwise
- 2022年九大CIO趋势和优先事项
- The performance of major mainstream programming languages is PK, and the results are unexpected
- Who the final say whether the product is good or not? Sonar puts forward performance indicators for analysis to help you easily judge product performance and performance
- 每周招聘|高级DBA年薪49+,机会越多,成功越近!
- PXE网络
- Preliminary exploration of flask: WSGI
- 宽度精度
- 文本挖掘工具的介绍[通俗易懂]
猜你喜欢
MySQL组合索引(多列索引)使用与优化案例详解
夜天之书 #53 Apache 开源社群的“石头汤”
MySQL learning notes - data type (numeric type)
Live broadcast preview | PostgreSQL kernel Interpretation Series II: PostgreSQL architecture
Ffprobe common commands
Redis哨兵模式实现一主二从三哨兵
开源人张亮的 17 年成长路线,热爱才能坚持
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
Deep learning neural network case (handwritten digit recognition)
【大连理工大学】考研初试复试资料分享
随机推荐
进制形式
Go zero micro service practical series (IX. ultimate optimization of seckill performance)
MySQL~MySQL给已有的数据表添加自增ID
On the implementation plan of MySQL explain
宽度与对齐
hexadecimal
Introduction of text mining tools [easy to understand]
mysql 联合主键_Mysql 创建联合主键[通俗易懂]
PXE网络
They are all talking about Devops. Do you really understand it?
Helix swarm Chinese package is released, and perforce further improves the user experience in China
华为云数据库DDS产品深度赋能
从0到1建设智能灰度数据体系:以vivo游戏中心为例
CentOS 6.3 下 PHP编译安装JSON模块报错解决
音视频技术开发周刊 | 252
直播预告 | PostgreSQL 内核解读系列第二讲:PostgreSQL 体系结构
Redis的4种缓存模式分享
這幾年爆火的智能物聯網(AIoT),到底前景如何?
The per capita savings of major cities in China have been released. Have you reached the standard?
Guitar Pro 8win10最新版吉他学习 / 打谱 / 创作