我有一个包含Strings的ArrayList,如下所示:
我想按照每个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);
}
答案 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。