当前位置:网站首页>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
边栏推荐
- Live broadcast preview | PostgreSQL kernel Interpretation Series II: PostgreSQL architecture
- 這幾年爆火的智能物聯網(AIoT),到底前景如何?
- Data Lake Governance: advantages, challenges and entry
- Building intelligent gray-scale data system from 0 to 1: Taking vivo game center as an example
- Quelles sont les perspectives de l'Internet intelligent des objets (aiot) qui a explosé ces dernières années?
- 在芯片高度集成的今天,绝大多数都是CMOS器件
- 直播预告 | PostgreSQL 内核解读系列第二讲:PostgreSQL 体系结构
- Redis 发布和订阅
- Unity预制件Prefab Day04
- Unity脚本API—Transform 变换
猜你喜欢
音视频技术开发周刊 | 252
They are all talking about Devops. Do you really understand it?
Redis publish and subscribe
每周招聘|高级DBA年薪49+,机会越多,成功越近!
智能客服赛道:网易七鱼、微洱科技打法迥异
MYSQL索引优化
How to handle exceptions in multithreading?
C1 certification learning notes 3 -- Web Foundation
Redis sentinel mode realizes one master, two slave and three Sentinels
函数式接口,方法引用,Lambda实现的List集合排序小工具
随机推荐
Unity预制件Prefab Day04
[learning notes] matroid
MySQL学习笔记——数据类型(数值类型)
%f格式符
Force button brush question 01 (reverse linked list + sliding window +lru cache mechanism)
lnx 高效搜索引擎、FastDeploy 推理部署工具箱、AI前沿论文 | ShowMeAI资讯日报 #07.04
Unity脚本常用API Day03
Quick introduction to automatic control principle + understanding
AI has surpassed Dr. CS in question making?
开源人张亮的 17 年成长路线,热爱才能坚持
智能客服赛道:网易七鱼、微洱科技打法迥异
c# 实现定义一套中间SQL可以跨库执行的SQL语句
Helix Swarm中文包发布,Perforce进一步提升中国用户体验
js平铺数据查找叶子节点
Flutter reports an error no mediaquery widget ancestor found
Width accuracy
[local differential privacy and random response code implementation] differential privacy code implementation series (13)
Align left and right!
LeetCode 1184. 公交站间的距离 ---vector顺逆时针
Preliminary exploration of flask: WSGI