【发布时间】:2019-05-30 07:19:37
【问题描述】:
我有一个由数字和字母组成的项目列表,如下所示:
原名单:
Apple 1
Apple 1
Apple 4
Apple 1A
Apple 1B
Apple 1D
Apple 2A
Apple 2A
Apple 1C
Apple 1B
Apple 2C
Apple 10
Apple 11
Apple 5
Apple 11
Apple 8D
Banana 1
Banana 4
Banana 9D
Banana 9E
Banana 9C
Banana 13
Banana 16
它是来自 API 的搜索结果,但仅按 Apples 和 Bananas 的字母顺序排序。现在我想按数字排序(数字随机带有字母 A、B、C、D、E),如下所示:
带有A、B、C、D、E字母的数字应按数字和字母顺序排列。
预期列表:
Apple 1
Apple 1
Apple 1A
Apple 1B
Apple 1B
Apple 1C
Apple 1D
Apple 2
Apple 2A
Apple 2A
Apple 2C
Apple 4
Apple 5
Apple 8D
Apple 10
Apple 11
Banana 1
Banana 4
Banana 9C
Banana 9D
Banana 9E
Banana 13
Banana 16
我已经尝试过这个解决方案,但是它按项目以 0-9 数字开头,如下所示:
private List<Location> sortLocationList(List<Location> locationArrayList){
Collections.sort(locationArrayList, new Comparator<Location>(){
@Override
public int compare(Location o1, Location o2){
return o1.getValue().compareToIgnoreCase(o2.getValue());
}
});
return locationArrayList;
}
public class Location{
public enum LocationType{ADDRESS, STREET, CITY}
private JavascriptObject object;
private LocationType locationType;
private String value;
public Location(LocationType locationType, String value, JavascriptObject object){
this.locationType = locationType;
this.value = value;
this.object = object;
}
}
我的解决方案是返回这个:
Apple 1
Apple 1
Apple 10
Apple 11
Apple 1A
Apple 1B
Apple 1B
Apple 1C
Apple 1D
Apple 2
Apple 2A
Apple 2A
Apple 2C
Apple 4
Apple 5
Apple 8D
Banana 1
Banana 13
Banana 16
Banana 4
Banana 9C
Banana 9D
Banana 9E
对这个列表排序有更好的解决方案吗?
提前致谢。
【问题讨论】:
-
将位置拆分为 Apple、2、C 等三个部分。如果它们不同,则按第一部分排序,如果相等,则按第二部分。如果第二个相等,则第三个
-
谷歌“java字母数字比较”。你会发现许多问题和答案,以及许多算法——其中许多是错误的,有些是正确的。然后你的任务就是找到一个能正常工作的。
标签: java string algorithm sorting