当前位置:网站首页>Interface fonctionnelle, référence de méthode, Widget de tri de liste implémenté par lambda
Interface fonctionnelle, référence de méthode, Widget de tri de liste implémenté par lambda
2022-07-04 16:12:00 【Fabricant de bogues humanoïdes 9527】
1.InJava8Une interface fonctionnelle a été introduite dansConsumerObjet de,L'objet peut passer la méthode comme paramètre.
À propos delambdaTutoriels pour
/** * Tri des collections */
@AllArgsConstructor
public class CollSort {
// Facteur de tri
private final Long order;
public final static CollSort DESC = new CollSort(-1L);
public final static CollSort ASC = new CollSort(1L);
// Trier par nombre
public <E> Collection<E> sort(Collection<E> collection, ProcessorNumber<E> getParam) {
return collection.stream()
.filter(Objects::nonNull)
.sorted((o1, o2) -> {
// Ici, la méthode abstraite entrante est exécutée,Et passer dans les paramètres requis par la méthode de fonction,
// getParam La valeur de retour de a été déterminée dans la méthode de fonction abstraite
long result = Long.parseLong(String.valueOf(getParam.accept(o1))) - Long.parseLong(String.valueOf(getParam.accept(o2)));
result = result * order; // Le coefficient de tri intervient
return result == 0 ? 0 : result < 0 ? -1 : 1;
})
.collect(Collectors.toList());
}
// Trier par heure
public <E> Collection<E> sort(Collection<E> collection, ProcessorDate<E> getParam) {
return collection.stream()
.filter(Objects::nonNull) // Filtrage de données invalide
.sorted((o1, o2) -> {
long t1 = getParam.accept(o1).getTime(); // Voici une méthode abstraite getParam La valeur de retour de a été déterminée dans la méthode de fonction abstraite
long t2 = getParam.accept(o2).getTime();
long result = t1 - t2;
result = result * order; // Le coefficient de tri intervient
return result == 0 ? 0 : result < 0 ? -1 : 1;
})
.collect(Collectors.toList());
}
}
@FunctionalInterface
interface ProcessorDate<E> {
/** * Méthode de fonction abstraite pour obtenir les propriétés temporelles de l'objet * * @param t Objet * @return Propriétés temporelles de l'objet */
Date accept(E t);
}
@FunctionalInterface
interface ProcessorNumber<E> {
/** * Méthode de fonction abstraite pour obtenir les propriétés numériques d'un objet * * @param t Objet * @return Propriétés numériques de l'objet */
Number accept(E t);
}
Utiliser
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) {
// Pour les appels de méthodes d'outils ordinaires , La différence est que les paramètres sont une méthode , Il est également possible de se référer directement à la méthode
Collection<User> ageSort = CollSort.ASC.sort(users, User::getAge);
System.out.println("Classement par âge=========================");
ageSort.forEach(System.out::println);
System.out.println(" Tri des anniversaires ======================");
Collection<User> timeSort = CollSort.DESC.sort(users, User::getBirthDay);
timeSort.forEach(System.out::println);
}
Effets
L'interface de fonction peut être étendue en fonction des besoins ,Attention requiseType de paramètre
EtType de valeur de retour
, La plupart du temps, il suffit de changer le type de valeur de retour ;
Le type de paramètre et le type de valeur de retour affectent les paramètres que cette méthode de fonction doit passer au moment de l'appel , Et les valeurs de réponse
边栏推荐
- Socks agent tools earthworm, ssoks
- Quelles sont les perspectives de l'Internet intelligent des objets (aiot) qui a explosé ces dernières années?
- Dry goods | fMRI standard reporting guidelines are fresh, come and increase your knowledge
- js平铺数据查找叶子节点
- Summary of database 2
- Talking about Net core how to use efcore to inject multiple instances of a context annotation type for connecting to the master-slave database
- Audio and video technology development weekly | 252
- How can floating point numbers be compared with 0?
- Move, say goodbye to the past again
- Function test - knowledge points and common interview questions
猜你喜欢
Common API day03 of unity script
What is the future of the booming intelligent Internet of things (aiot) in recent years?
Unity脚本常用API Day03
Hidden communication tunnel technology: intranet penetration tool NPS
QT graphical view frame: element movement
The new generation of domestic ORM framework sagacity sqltoy-5.1.25 release
Detailed explanation of MySQL composite index (multi column index) use and optimization cases
The 17 year growth route of Zhang Liang, an open source person, can only be adhered to if he loves it
干货 | fMRI标准报告指南新鲜出炉啦,快来涨知识吧
Game theory
随机推荐
Unity脚本介绍 Day01
PXE network
Qt---error: ‘QObject‘ is an ambiguous base of ‘MyView‘
Understand Alibaba cloud's secret weapon "dragon architecture" in the article "science popularization talent"
Stress, anxiety or depression? Correct diagnosis and retreatment
AI做题水平已超过CS博士?
MySQL - MySQL adds self incrementing IDs to existing data tables
Web components series - detailed slides
Unity animation day05
Neuf tendances et priorités du DPI en 2022
Can I "reverse" a Boolean value- Can I 'invert' a bool?
The 17 year growth route of Zhang Liang, an open source person, can only be adhered to if he loves it
Stew in disorder
Redis' optimistic lock and pessimistic lock for solving transaction conflicts
Unity预制件Prefab Day04
Big God explains open source buff gain strategy live broadcast
Socks agent tools earthworm, ssoks
What should ABAP do when it calls a third-party API and encounters garbled code?
Lombok使用引发的血案
每周招聘|高级DBA年薪49+,机会越多,成功越近!