当前位置:网站首页>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
边栏推荐
猜你喜欢

Luo Gu - some interesting questions

Building intelligent gray-scale data system from 0 to 1: Taking vivo game center as an example

Huawei cloud database DDS products are deeply enabled

Helix swarm Chinese package is released, and perforce further improves the user experience in China

音视频技术开发周刊 | 252

每周招聘|高级DBA年薪49+,机会越多,成功越近!
Redis sentinel mode realizes one master, two slave and three Sentinels

AI has surpassed Dr. CS in question making?

Deep learning neural network case (handwritten digit recognition)

MySQL学习笔记——数据类型(2)
随机推荐
Ffmpeg Visual Studio development (IV): audio decoding
MySQL组合索引(多列索引)使用与优化案例详解
unity update 协程_Unity 协程的原理
对话龙智高级咨询顾问、Atlassian认证专家叶燕秀:Atlassian产品进入后Server时代,中国用户应当何去何从?
Redis 解决事务冲突之乐观锁和悲观锁
PXE网络
Helix Swarm中文包发布,Perforce进一步提升中国用户体验
Shell programming basics
Preliminary exploration of flask: WSGI
Flutter reports an error no mediaquery widget ancestor found
Deep learning network regularization
.Net 应用考虑x64生成
Techsmith Camtasia Studio 2022.0.2屏幕录制软件
How to handle exceptions in multithreading?
They are all talking about Devops. Do you really understand it?
智能客服赛道:网易七鱼、微洱科技打法迥异
PXE network
On the implementation plan of MySQL explain
Quelles sont les perspectives de l'Internet intelligent des objets (aiot) qui a explosé ces dernières années?
In today's highly integrated chips, most of them are CMOS devices