日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

list 置顶元素_java集合指定元素排序:最前,按照提供的顺序排序?求算法

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 list 置顶元素_java集合指定元素排序:最前,按照提供的顺序排序?求算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哈哈哈,不好意思,問了題主那么久...根據我獲得需求描述,最后我還是覺得引用新的編程元素來使業務稍微變簡單的,我整理到需求應該是:

首先給定一個指定關鍵字的排序,給出一個字符串列表,對列表進行排序,若字符串列表中包含了關鍵字,則該這種字符串優先級高,排前面,并且還要根據該字符串所包含的關鍵字順序排序,其他沒有包含關鍵字的字符串則靠后,順序不用關心

所以我引用了新的編程元素,因為給出的orderings是有順序的,所以只有一個字符串是不能體現這個順序的,我新增加了一個元素OrderParam

@Getter

@Builder

public class OrderParam{

private String param;

// 值越小,優先級越高

private int order;

}

所以之前的

List orderings= Stream.of("溫度", "運行時間").collect(Collectors.toList());

就變為

List orderings= OrderParams.createOrderings("溫度", "運行時間");

這里寫了一個工具類OrderParams

public class OrderParams{

/**

* 根據字符串數組生成OrderParam集合

* @param params

* @return

*/

public static List createOrderings(String ... params){

return IntStream.range(0, params.length)

.mapToObj(i -> OrderParam.builder().param(params[i]).order(i).build())

.collect(Collectors.toList());

}

}

然后最后的測試類寫出來就是這個樣子

public class Test {

/**

* 這里思路很簡單,orderings是有順序,給出的target先按照orderings的順序設定它的優先級,然后直接根據優先級排序就可以了

* @param args

*/

public static void main(String[] args) {

List orderings= OrderParams.createOrderings("溫度", "運行時間");

List target= Stream.of("sa", "溫度1", "ttttt", "運行時間", "溫度", "運行時間ss")

.collect(Collectors.toList());

List result = target.stream()

.map(t -> toOrderParam(orderings, t))

// 這里已經轉化成了OrderParam了,所以直接根據OrderParam的order排序即可

.sorted(Comparator.comparing(OrderParam::getOrder))

.map(OrderParam::getParam)

.collect(Collectors.toList());

System.out.println(result);

}

private static OrderParam toOrderParam(List orderings, String t) {

return orderings.stream()

.filter(orderParam -> t.contains(orderParam.getParam()))

.findFirst()

.map(orderParam -> OrderParam.builder().param(t).order(orderParam.getOrder()).build())

// 沒有包含在orderings里的,就給一個最低優先級即可

.orElse(OrderParam.builder().param(t).order(Integer.MAX_VALUE).build());

}

}

最后執行結果:

以上就是我的想法。。。問的有點多。。打擾了。。哈哈哈哈

總結

以上是生活随笔為你收集整理的list 置顶元素_java集合指定元素排序:最前,按照提供的顺序排序?求算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。