按每个字符串中的逗号后的值按字母顺序对ArrayList进行排序

时间:2017-01-24 09:32:39

标签: java arrays string arraylist

我有一个包含Strings的ArrayList,如下所示:

  • 第1项:一些文字,Annabelle
  • 第2项:一些文字,詹姆斯
  • 第3项:有些文字,Conner

我想按照每个String中逗号之后的值按字母顺序对ArrayList进行排序。

我怎样才能做到这一点?

    ArrayList<String> lineList = new ArrayList<>();

    // New BufferedReader.
    BufferedReader reader = new BufferedReader(new FileReader(
            file));

    // Add all lines from file to ArrayList.
    while (true) {
        String line = reader.readLine();
        if (line == null) {
            break;
        }
        lineList.add(line);
    }

    // Close it.
    reader.close();

    // Print each line.
    for (String line : lineList) {
        System.out.println(line);
    }

6 个答案:

答案 0 :(得分:5)

使用Comparator方法Collections.sort()

例如:

Collections.sort(lineList, new Comparator<String>{
    public int compare(String str1, String str2) {
        String actual1 = str1.split(",")[1];
        String actual2 = str2.split(",")[1];

        return actual1.compare(actual2);
    }
});

如果有零个或多个逗号,您可能需要某种方法来确保实际提取字符串的正确部分。例如,您可以将substring()lastIndexOf()结合使用,作为提及的IQV。

答案 1 :(得分:1)

import java.util.*;

public class Test {
    public static void main(String... args) {
        List<String> list = new ArrayList<>();
        list.add("zzz, abc");
        list.add("yy, ghi");
        list.add("x, def");
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String lhs, String rhs) {
                return filter(lhs).compareTo(filter(rhs));
            }

            private String filter(String s) {
                // consider the first comma
                return s.replaceFirst("^.*?, ", "");
                // to consider the last comma instead:
                // return s.replaceFirst("^.*, ", "");
            }
        });
        for (String s : list)
            System.out.println(s);
    }
}

输出结果为:

zzz, abc
x, def
yy, ghi

答案 2 :(得分:1)

这是使用Java 8的单线程:

lineList.sort((String s1, String s2) -> s1.split(",")[1].compareTo(s2.split(",")[1]));

答案 3 :(得分:1)

不要在填充后对列表进行排序,即时对其进行排序:

public static DateTime? DateFromString(string value)
{
   if (string.IsNullOrWhiteSpace(value))
     {
       return null;
     }
   else
     {
        return DateTime.ParseExact(dateString, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
     }
}

DateTime? date=DateFromString(e.Record["CHEQUE_DT"]);
drExpInfo[0]["CHEQUE_DT"] = date==null? DBNull.Value : (object)date);

答案 4 :(得分:1)

使用Java 8的单行变体:

Collections.sort(list, Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));

或更短

list.sort(Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));

答案 5 :(得分:0)

正如jesper所说,你需要一个比较器。在此比较器中,使用方法from selenium import webdriver import ahk driver=webdriver.Ie() driver.maximize_window() driver.get('https://www.engprod-charter.net/') ahk.start() ahk.ready() ahk.execute('Send %s ' % username) ahk.execute('Send %A_Tab%') ahk.execute('Send %s ' % password) driver.quit() 标识forname。