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

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

Spring中如何使用Comparator接口

瀏覽:207日期: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久久,三上悠亚国产精品一区二区三区
日韩成人精品一区| 亚洲高清av| 99久久久久国产精品| 成人午夜精品| 不卡av一区二区| 好看的av在线不卡观看| 国产精品嫩草99av在线| 中文字幕av亚洲精品一部二部| 中文字幕一区二区av| 国产色99精品9i| 国产在线观看91一区二区三区| 日韩理论视频| 九一精品国产| 天堂精品久久久久| 国产精品三级| 91精品韩国| 欧美日中文字幕| 亚洲精一区二区三区| 国产精品二区影院| 日韩网站中文字幕| 亚洲一区二区三区高清| 国产欧美日韩在线观看视频| 国产精品毛片久久| 亚洲综合日韩| 久久99国产精品视频| 亚洲福利精品| 欧美日韩调教| 91精品国产91久久久久久黑人| 亚洲欧美视频| 美女久久久精品| 米奇777超碰欧美日韩亚洲| 免费日本视频一区| 精品一区视频| 久久亚洲美女| 黑森林国产精品av| 亚洲tv在线| 91欧美国产| 爽好久久久欧美精品| 精品视频高潮| 视频在线观看91| 麻豆91小视频| 日本 国产 欧美色综合| 精品久久久久久久| 中文不卡在线| 日韩成人亚洲| 国产精品一区二区三区四区在线观看| 人人草在线视频| 国产亚洲一区| 伊人影院久久| 欧美亚洲日本精品| 日韩成人精品一区二区三区 | 欧美~级网站不卡| 久久国产精品免费精品3p| 欧美成人高清| 精品99在线| 欧美日韩va| 免费美女久久99| 亚洲高清成人| 国产夫妻在线| 国产精品二区影院| 亚洲a成人v| 国产精品美女| 欧美日韩一区二区综合| 精品国产美女a久久9999| 青青青国产精品| 亚洲五月综合| 亚洲综合精品| 免费视频亚洲| 成人精品中文字幕| 精品国产一区二区三区噜噜噜| 综合亚洲色图| 亚洲免费中文| 最新亚洲激情| 婷婷丁香综合| 99久久夜色精品国产亚洲1000部| 欧美亚洲tv| 日本亚州欧洲精品不卡| 一级欧洲+日本+国产| 久久久精品五月天| 色一区二区三区四区| 成人精品动漫一区二区三区| 国产高清精品二区| 国产精品男女| 国产无遮挡裸体免费久久| 亚洲精品激情| 亚洲综合中文| 99视频一区| 伊人久久婷婷| 亚洲欧美久久久| 麻豆精品91| 国产亚洲精品v| 亚洲欧美日本视频在线观看| 亚洲少妇自拍| 伊人久久亚洲| 日韩精品一区二区三区中文字幕| 中文字幕一区日韩精品| 蜜桃av一区二区三区电影| 欧美专区一区二区三区| 免费视频一区二区| 亚洲bt欧美bt精品777| 日韩精品一区二区三区中文在线 | 欧美日韩国产高清| 久久中文字幕av| 亚洲精品网址| 只有精品亚洲| 国产精品一区二区精品视频观看| 国产精品久久久久久久久免费高清| 国产精品久久久亚洲一区| 国产精品对白| 国产不卡精品在线| 日韩毛片在线| 国产精品人人爽人人做我的可爱| 亚洲三级毛片| 国产精品久久久久久久久久齐齐| 精品网站999| av在线最新| 2023国产精品久久久精品双| 久久成人精品| 国产精品久久久久av蜜臀| 国产一区调教| 欧美日韩精品一本二本三本| 亚洲bt欧美bt精品777| 欧美成人aaa| 久久久国产亚洲精品| 在线精品福利| 美腿丝袜亚洲三区| 亚洲91视频| 亚洲精品自拍| 日本一二区不卡| 亚洲欧美久久| 久久国产人妖系列| 高清av不卡| 免费看精品久久片| 国产精品多人| 99久久夜色精品国产亚洲狼| 亚洲深深色噜噜狠狠爱网站 | 电影亚洲精品噜噜在线观看| 狠狠干成人综合网| 国产亚洲一区二区三区啪| 欧美日韩国产v| 日韩中文字幕区一区有砖一区 | 国产精品手机在线播放| 欧美aa在线观看| 亚洲人www| 成人在线超碰| 免费中文字幕日韩欧美| 久久精品一区二区三区中文字幕| 激情久久婷婷| 欧美国产另类| 久久福利一区| 日本午夜大片a在线观看| 亚洲精品精选| 久久91导航| 国产欧美激情| 国产精品色网| 日韩一区二区三区免费| 国产精品片aa在线观看| 先锋亚洲精品| 亚洲不卡系列| 国产福利一区二区精品秒拍| 亚洲一区激情| 久久黄色影院| 国产精品欧美日韩一区| 亚洲一区欧美二区| 亚洲天堂一区二区| 国产三级一区| 久久夜色精品| 91精品婷婷色在线观看| 麻豆国产91在线播放| 亚州av一区| 国产精品日韩欧美一区| 成人羞羞视频播放网站| 欧美激情福利| 欧美一级久久| 亚洲精品伊人| 亚洲欧美日本国产专区一区| 亚洲天堂一区二区| 精品国产亚洲一区二区三区在线 | 色狠狠一区二区三区| 99久久视频| 水蜜桃精品av一区二区| 国产精品www994| 日韩精品免费视频一区二区三区 | 国产精品美女久久久| 免费观看亚洲| 久久精品国产久精国产| 国产探花一区在线观看| 亚洲精品黄色| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品专区免费| 国产一区二区三区视频在线| 日欧美一区二区| 亚洲香蕉视频| 男人的天堂亚洲一区| 野花国产精品入口| 欧美日韩国产免费观看| 欧美.日韩.国产.一区.二区| 久久久天天操| 久久久久.com| 久久精品青草|