首页 > 解决方案 > 根据另一个列表字符串对列表字符串进行排序

问题描述

我有一个List<String>这样的值:

static String input = "pro or 7";
List<String> arrayOfString = Arrays.asList(input.toLowerCase().split("\\s+"));

我有另一个字符串列表:

static List<String> organizations = Arrays.asList(
        "Service Provider organisation 3 01254 25742", // count=3
        "Service Provider test 2 132455 132455",       // count=1
        "Service Provider organisation 2 78900 6521",  // count=3
        "VOYAGES ANSELMINO 30876168300025 382510022",  // count=1
        "Service Provider test 1 32722 21211",         // count=2
        "SP recherche autocomplete 7897788 7897788")   // count=1
        .stream().map(String::toLowerCase)
        .collect(Collectors.toList());

我想根据列表 arrayOfString 的元素对列表组织进行排序

例子:

count将等于 2,因为str包含 'pro' 和 '7'

count将等于 1,因为str包含“7”(消除重复字符)

然后根据结果对列表组织进行排序count

标签: java

解决方案


我根据提示{@Lokesh give} 来实现它作为练习。你可以参考一下。

List<String> organizations = Arrays.asList(
    "Service Provider organisation 3 01254 25742", // count=3
    "Service Provider test 2 132455 132455",       // count=1
    "Service Provider organisation 2 78900 6521",  // count=3
    "VOYAGES ANSELMINO 30876168300025 382510022",  // count=1
    "Service Provider test 1 32722 21211",         // count=2
    "SP recherche autocomplete 7897788 7897788")   // count=1
    .stream().map(String::toLowerCase).sorted(new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return getCountMeetCondition(o2) - getCountMeetCondition(o1);
        }
}).collect(Collectors.toList());

private static int getCountMeetCondition(String s) {
    int count = 0;
    for (int i = 0; i < arrayOfString.size(); i++) {
        if (s.contains(arrayOfString.get(i))) {
            count++;
        }
   }
   return count;
}

推荐阅读