我有一个包含一些字符串的列表:
GS_456.java
GS_456_V1.java
GS_456_V2.java
GS_460.java
GS_460_V1.java
事情还在继续。我想要一个包含最高值字符串的列表:
GS_456_V2.java
GS_460_V1.java
.
.
.
我只是想使用大量的 for 语句...但是没有更实用的方法吗?我想避免使用太多 for 语句...因为我在执行一些查询时经常使用它们...
编辑:带有 V1、V2、.... 的字符串是最近创建的类的名称。例如,当有人创建 GS_456 的新版本时,他们会执行此操作并在名称末尾添加其版本。
因此,GS_456_V2 是 GS_456 java 类的最新版本。事情还在继续。
提前致谢。
最佳答案
您将需要分两步处理文件名。
第 1 步:将列表拆分为子列表,每个文件名一个子列表(忽略后缀)。 下面是将列表拆分为 Map 的示例:
private static Map> nameMap = new HashMap>();
private static void splitEmUp(final List names)
{
for (String current : names)
{
List listaly;
String[] splitaly = current.split("_|\\.");
listaly = nameMap.get(splitaly[1]);
if (listaly == null)
{
listaly = new LinkedList();
nameMap.put(splitaly[1], listaly);
}
listaly.add(current);
}
第 2 步:找到每个名称的最高前缀。这是一个例子:
private static List findEmAll()
{
List returnValue = new LinkedList();
Set keySet = nameMap.keySet();
for (String key : keySet)
{
List listaly = nameMap.get(key);
String highValue = null;
if (listaly.size() == 1)
{
highValue = listaly.get(0);
}
else
{
int highVersion = 0;
for (String name : listaly)
{
String[] versions = name.split("_V|\\.");
if (versions.length == 3)
{
int versionNumber = Integer.parseInt(versions[1]);
if (versionNumber > highVersion)
{
highValue = name;
highVersion = versionNumber;
}
}
}
}
returnValue.add(highValue);
}
return returnValue;
}
关于java - java中获取值最高的字符串(字符串具有相同的 'base'名称但后缀不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137549/