如何根据字符串的相等性对字符串列表进行排序?

时间:2014-07-09 12:11:08

标签: java list sorting autofill

我有一个大字符串列表和组合框的自动填充功能。 目前我只是根据包含过滤。 但是组合框中的顺序并不好。

是否有一种简单的方法可以根据字符串的相等性对字符串列表(在包含之后)进行排序?

示例:

Currently:
combobox input -> Neustadt
List<String> 1. Bad Neustadt an der Saale
             2. Bremen-Neustadt
             3. ...
             n. Neustadt
           n+1. Neustadt / Pelzerhaken

Wandted:
1. Neustadt
2. Neustadt / Pelzerhaken
3. ...
n. Bremen-Neustadt

修改 根据Petr Gladkikh的回答,我的解决方案是遵循以下方法:

public static List<String> sortListCompairedToEquality(List<String> list, String str) {

  if (list == null || str == null)
    return null;

  final String compStr = str.toLowerCase();

  Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
      s1 = s1.toLowerCase();
      s2 = s2.toLowerCase();

      if (s1.equals(compStr) && !s2.equals(compStr)) {
        return -1;
      } else if (!s1.equals(compStr) && s2.equals(compStr)) {
        return 1;
      } else if (s1.indexOf(compStr) < s2.indexOf(compStr)) {
        return -1;
      } else if (s1.indexOf(compStr) > s2.indexOf(compStr)) {
        return 1;
      }
      return 0;
    }
  });

  return list;
}

1 个答案:

答案 0 :(得分:1)

目前尚不清楚&#34;字符串的相等规则&#34;你记得。通常,如果您想根据某些规则进行排序,请使用&#39; sort&#39;自定义比较器的方法:

java.util.Collections.sort(listOfStrings, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return 0; // Your comparison logic goes here
        }
    });

有关详细信息,请参阅java.util.Comparator接口的javadoc。