日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring中如何使用Comparator接口

瀏覽:210日期:2023-07-08 08:00:38

我們先來回顧下Comparator接口在我們日常開發中的作用,Comparator比較器接口可以將自身傳遞給排序方法(比如Collections.sort或Arrays.sort),以便對排序順序進行精確控制。比如:

List<Integer> intList = Arrays.asList(2, 3, 1);Collections.sort(intList, (o1, o2) -> { return o2-o1;});

輸出

[3, 2, 1]

Comparator可以用來控制某些數據結構(如sored sets 或sorted maps)的順序,或者為沒有自然順序的對象集合提供順序,比如:

public class Emp { private int empNo; private String eName; //省略getter setter @Override public String toString() { return 'empno:t'+empno+'tename:t'+ename; }}Comparator<Emp> comparator = (o1, o2) -> { return o1.getEmpno()-o2.getEmpno();};empList.sort(comparator);

從以上使用方法可以看出Comparator是策略模式的一個經典體現,在Spring中它為實現了Ordered接口的類寫了一個比較器名叫OrderComparator,我們來看看它的compare方法:

@Overridepublic int compare(@Nullable Object o1, @Nullable Object o2) { return doCompare(o1, o2, null);}private int doCompare(@Nullable Object o1, @Nullable Object o2, @Nullable OrderSourceProvider sourceProvider) { //判斷是否實現了PriorityOrdered接口 //o1為原先的后一個元素 //o2為原先的前一個元素 boolean p1 = (o1 instanceof PriorityOrdered); boolean p2 = (o2 instanceof PriorityOrdered); //p1實現了PriorityOrdered,但是p2沒實現PriorityOrdered,則p1優先級更高 if (p1 && !p2) { ////小于0 表示逆序 o1排前 return -1; } else if (p2 && !p1) { //p2實現了PriorityOrdered,但是p1沒實現PriorityOrdered,則p2優先級更高 //大于0 表示正序 o2排前 return 1; } int i1 = getOrder(o1, sourceProvider); int i2 = getOrder(o2, sourceProvider); return Integer.compare(i1, i2);} protected int getOrder(@Nullable Object obj) {if (obj != null) { Integer order = findOrder(obj); if (order != null) {return order; }} //Integer.MAX_VALUE代表最低優先級return Ordered.LOWEST_PRECEDENCE; } @Nullable protected Integer findOrder(Object obj) {return (obj instanceof Ordered ? ((Ordered) obj).getOrder() : null); }

OrderComparator主要是通過實現Order接口方法getOrder返回的值來比較的,而通過注解Order比較的話是采用繼承OrderComparator類的AnnotationAwareOrderComparator類來重載getOrder方法來實現:

@Override@Nullableprotected Integer findOrder(Object obj) { // Check for regular Ordered interface //檢查常規的Order接口 Integer order = super.findOrder(obj); if (order != null) { return order; } //檢查@Order注解和@Priority注解 // Check for @Order and @Priority on various kinds of elements if (obj instanceof Class) { return OrderUtils.getOrder((Class<?>) obj); } else if (obj instanceof Method) { Order ann = AnnotationUtils.findAnnotation((Method) obj, Order.class); if (ann != null) { return ann.value(); } } else if (obj instanceof AnnotatedElement) { //AnnotatedElement代表在當前運行的java虛擬機中一個可以被注解的元素,這個接口允許通過反射讀取元素上面的注解,這與我們之前的理解是一致的 //https://www.yuque.com/cuihualong/javaseries/sh91es Order ann = AnnotationUtils.getAnnotation((AnnotatedElement) obj, Order.class); if (ann != null) { return ann.value(); } } else { order = OrderUtils.getOrder(obj.getClass()); if (order == null && obj instanceof DecoratingProxy) { order = OrderUtils.getOrder(((DecoratingProxy) obj).getDecoratedClass()); } } return order;}

這里順便提下在SpringBoot中ConditionalOnBean,ConditionalOnProperty,ConditionalOnClass等注解實際上都采用了實現Order注解的方法來進行排序。這里我就截個圖看下了:

Spring中如何使用Comparator接口

Conditional注解中的OnClassCondition類就標了@Order注解

Spring中如何使用Comparator接口

實現Comparator接口compare方法的時候主要是要注意以下幾點(翻譯自官方文檔):

Spring中如何使用Comparator接口

用中文簡單來說就是在 JDK7 版本以上默認使用Timsort排序方法來實現,Comparator 比較器要滿足自反性,傳遞性,反對稱性,不然 Arrays.sort,Collections.sort有可能會報 IllegalArgumentException 異常。

以上就是Spring中如何使用Comparator接口的詳細內容,更多關于Spring 使用Comparator接口的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩专区精品| 男女男精品网站| 国产精品亚洲人成在99www| 亚洲+小说+欧美+激情+另类| 性欧美长视频| 日韩在线播放一区二区| 99视频一区| 亚洲一区久久| 亚洲三级毛片| 欧美综合社区国产| 日韩福利在线观看| 国产欧美一区二区精品久久久| 国产精品一站二站| 久久久久九九精品影院| 国产一区二区三区四区二区| 色在线中文字幕| 免费久久精品| 亚洲一区二区小说| 久久黄色影视| 色婷婷亚洲mv天堂mv在影片| 欧美日韩在线网站| 美女国产精品| 日本视频中文字幕一区二区三区| 国产精品日本一区二区不卡视频| 精品一区电影| 亚洲不卡av不卡一区二区| 欧美网站在线| 日本中文字幕一区二区| 精品国产一区二区三区性色av| 中文一区一区三区高中清不卡免费| 91精品婷婷色在线观看| 久久亚洲风情| 国产精品激情电影| 色88888久久久久久影院| 亚洲欧美久久久| 国产精品免费不| av亚洲一区二区三区| 免费在线观看一区二区三区| 国产精品高清一区二区| 久久久天天操| 日本不卡一区二区三区| 精品深夜福利视频| 午夜久久99| 国产精品日本一区二区三区在线| 啪啪国产精品| 日韩国产欧美在线播放| 亚洲一区资源| 亚洲免费成人av在线| 岛国精品一区| 亚洲涩涩av| 97国产精品| 亚洲精品美女91| 免费高潮视频95在线观看网站| 蜜桃视频一区二区三区在线观看| 精品美女在线视频| 免费在线观看成人| 国产一区二区三区亚洲| 日韩网站在线| 亚洲视频国产| 国产精品二区不卡| 久久国产99| 精品免费av一区二区三区| 国产99久久| 国产欧美一区二区精品久久久 | 国产欧美日韩| 亚洲午夜久久久久久尤物| 日韩动漫一区| 欧美va天堂在线| 日韩av影院| 免费不卡中文字幕在线| 精品国产亚洲日本| 天堂久久av| 欧美精品一二| 国内精品伊人| 视频精品一区| 国产一区亚洲| 成人精品国产亚洲| 青草久久视频| 六月天综合网| 日韩电影免费在线观看| 日本视频一区二区| 天堂av在线一区| 久久精品国产68国产精品亚洲| 国产精品亚洲欧美日韩一区在线| 久久国产精品久久w女人spa| 久久精品色播| 国产亚洲久久| 亚洲精选av| 在线看片不卡| 蜜桃成人精品| 久久久国产精品网站| 亚洲3区在线| 亚洲精品888| 欧美日韩国产v| 成人三级高清视频在线看| 国产免费av国片精品草莓男男| 亚洲精品高潮| 美女网站久久| 久久影院一区| 日韩精品首页| caoporn视频在线| 欧美成人aaa| 国产日韩1区| 日韩avvvv在线播放| 亚洲一区二区日韩| 亚洲综合精品| 国产精品日韩久久久| 伊人久久大香线蕉av不卡| 都市激情国产精品| 国产一区二区三区视频在线| 久久xxx视频| 国产日韩高清一区二区三区在线 | 国产精品欧美三级在线观看| 日本中文字幕一区二区| 中文在线日韩| 亚洲人成精品久久久| 亚洲伊人精品酒店| 蜜臀久久99精品久久久久宅男 | 好吊一区二区三区| 亚洲性色视频| 久久一区二区三区喷水| 亚洲国产影院| 亚洲精品国产偷自在线观看| 欧美日韩高清| 久久亚洲成人| 九九综合在线| 欧美日韩国产高清| 亚洲视频播放| 亚洲一区二区成人| 蜜桃视频一区二区| 日本不卡视频在线观看| 日本免费一区二区视频| 日本三级亚洲精品| 久久超级碰碰| 水蜜桃久久夜色精品一区| 成人美女视频| 激情婷婷欧美| 久久国产精品毛片| 日本欧美一区二区| 国产精品伦一区二区| 另类小说一区二区三区| 国产一区二区三区久久| av亚洲一区二区三区| 99日韩精品| 天堂俺去俺来也www久久婷婷| 日韩av中文字幕一区| 麻豆免费精品视频| 日韩免费一区| 久久xxxx精品视频| 91精品视频一区二区| 久久97视频| 99久久婷婷| 亚洲一区二区三区四区电影| 欧美亚洲一区二区三区| 福利一区在线| 99久久精品网| 日韩 欧美一区二区三区| 久久精品资源| 欧美日韩国产免费观看| 欧美日韩 国产精品| 欧美久久天堂| 三级在线观看一区二区| 欧美日韩一区二区三区在线电影| 精品丝袜久久| 99在线|亚洲一区二区| 欧美在线观看天堂一区二区三区| 亚洲欧洲美洲av| 亚洲自啪免费| 国产精品高清一区二区| 欧美日韩中文字幕一区二区三区| 快she精品国产999| 久久中文字幕一区二区三区| 欧美日韩国产免费观看视频| 7777精品| 91精品亚洲| 国产欧美啪啪| 亚洲高清激情| 欧美视频精品全部免费观看| 美女福利一区二区三区| 亚洲精品免费观看| 色乱码一区二区三区网站| 久久先锋影音| 国产精品原创| 日韩精品视频中文字幕| 亚洲精品在线影院| 综合激情网...| 久久久久久夜| 日韩一区二区三区免费视频| 欧美aa在线观看| 日本一区二区三区中文字幕| 日韩精品永久网址| 日本h片久久| 激情综合网五月| 久久亚洲道色| 一区二区国产在线| 精精国产xxxx视频在线野外| 青青国产91久久久久久| 一区在线免费观看| 精品久久中文| 日韩精品免费观看视频|