gpt4 book ai didi

java - 对字符串进行分组 - Java

转载 作者:行者123 更新时间:2023-12-01 19:47:29 25 4
gpt4 key购买 nike

我有一个数组列表。我想对相似的项目进行分组,使得 letter.pdf 是每组中的第一个。例如:

123_Letter.pdf
123_Others.pdf
123_More.pdf
222_Second.pdf
222_Letter.pdf
222_Third.pdf
222_Fourth.pdf
123_File.pdf

输出应该是:

**123_Letter.pdf**
123_Others.pdf
123_More.pdf
123_File.pdf
**222_Letter.pdf**
222_Second.pdf
222_Third.pdf
222_Fourth.pdf

每组中其他元素的顺序并不重要。列表中有超过 3000 个元素。正如您所看到的,仅仅排序并没有多大帮助。

我尝试了类似的操作,但缺少最后一个元素 123_File.pdf。有更好的方法吗?请帮忙。

String root = list.get(0).substring(0,4);

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

for (int i = 0; i < list.size(); i++) {
while (list.get(i).substring(0, 4).equals(root)) {
if (list.get(i).endsWith("etter.pdf")) {
al.add(0, list.get(i));
i++;
} else {
al.add(list.get(i));
i++;
}
}
System.out.println(al);
al = new ArrayList<>();
root = list.get(i).substring(0, 4);
}

最佳答案

听起来您想根据两个标准进行排序:

  • 每个列表项中的前三个字符,以及
  • 每个列表项的其余部分的内容,例如 Letter.pdf 首先出现。

一个合理的老式解决方案是实现一个自定义的java.util.Comparator,并将其用作排序的基础:

public static List<String> sortOldSchool(List<String> list){

Comparator<String> comparator = new Comparator<String>(){
private static final String LETTER = "Letter.pdf";
public int compare(String orange, String apple){
String ostart = orange.substring(0,3);
String astart = apple.substring(0,3);
if (ostart.equals(astart)){
if (orange.endsWith(LETTER)){
return (apple.endsWith(LETTER)) ? 0 : -1;
}
else return (apple.endsWith(LETTER)) ? 1 : orange.compareTo(apple);
}
else return ostart.compareTo(astart);
}
};
Collections.sort(list, comparator);
return list;
}

更现代的方法是利用从 Java 8 开始可用的新功能范例:

public static List<String> sortFunctional(List<String> list){

Comparator<String> firstThree= Comparator.comparing(item -> item.substring(0,3));
Comparator<String> letter = Comparator.comparing(item -> (!item.endsWith("Letter.pdf")));
return list.stream()
.sorted(firstThree.thenComparing(letter))
.collect(Collectors.toList());
}

关于java - 对字符串进行分组 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52656602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com