当前位置:网站首页>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
边栏推荐
- odoo数据库主控密码采用什么加密算法?
- Redis 解决事务冲突之乐观锁和悲观锁
- Unity脚本介绍 Day01
- Optimization method of deep learning neural network
- Logstash~Logstash配置(logstash.yml)详解
- 干货 | fMRI标准报告指南新鲜出炉啦,快来涨知识吧
- C implementation defines a set of intermediate SQL statements that can be executed across libraries
- 科普达人丨一文看懂阿里云的秘密武器“神龙架构”
- Data Lake Governance: advantages, challenges and entry
- 十六进制
猜你喜欢

Redis publier et s'abonner

Unity script lifecycle day02

力扣刷题01(反转链表+滑动窗口+LRU缓存机制)

Unity脚本生命周期 Day02

这几年爆火的智能物联网(AIoT),到底前景如何?
![[Dalian University of technology] information sharing of postgraduate entrance examination and re examination](/img/06/df5a64441814c9ecfa2f039318496e.jpg)
[Dalian University of technology] information sharing of postgraduate entrance examination and re examination

. Net applications consider x64 generation

Unity脚本常用API Day03

都在说DevOps,你真正了解它吗?

【大连理工大学】考研初试复试资料分享
随机推荐
Numpy notes
Shell 编程基础
Quick introduction to automatic control principle + understanding
%s格式符
Deep learning network regularization
What are the concepts of union, intersection, difference and complement?
selenium 元素交互
科研漫画 | 联系到被试后还需要做什么?
Preliminary exploration of flask: WSGI
力扣刷题01(反转链表+滑动窗口+LRU缓存机制)
When synchronized encounters this thing, there is a big hole, pay attention!
中国主要城市人均存款出炉,你达标了吗?
. Net applications consider x64 generation
Quelles sont les perspectives de l'Internet intelligent des objets (aiot) qui a explosé ces dernières années?
selenium 浏览器(2)
[Dalian University of technology] information sharing of postgraduate entrance examination and re examination
每周招聘|高级DBA年薪49+,机会越多,成功越近!
flutter 报错 No MediaQuery widget ancestor found.
一篇文章学会GO语言中的变量
Summer Review, we must avoid stepping on these holes!