我已经在Java中创建了一个列表,如下所示:
1 bbbb london
1.1 aaaa nyc
1.10 cccc jaipur
...
1.2 test test
1.11 test1 test1
我需要根据索引1,1.1,1.2等对其进行排序!这些是字符串值。
赞:
1 bbbb london
1.1 aaaa nyc
1.2 test test
...
1.10 cccc jaipur
1.11 test1 test1
我该怎么做?
最初,索引是浮点型的,但是为了获得列表中的1.10,我将索引更改为字符串,因此Collection.sort(list)
不能提供预期的输出。
我的目的是像创建编号的子弹一样
1 Helo
1.1 helo1
1.2 helo2
1.3 hello3
2 Test
2.1 Test1
2.2 Test2
3 World
请帮忙吗?
答案 0 :(得分:4)
给出列表:
List<String> list = Arrays.asList("1.32 bbbb london", "21.1 aaaa nyc",
"100.10 cccc jaipur", "1.2 test test",
"1.11 test1 test1");
您可以编写自己的自定义比较器,如下所示:
Collections.sort(list, new Comparator<String>() {
public int compare(String o1, String o2) {
return Float.compare(Float.parseFloat(o1.split(" ")[0]),
Float.parseFloat(o2.split(" ")[0]));
}
});
在这里,我们将字符串除以" "
,然后获取字符串的 floating 部分,该部分恰好是数组的第一个 index 。现在,我们将其解析为一个float并将其与第二个字符串进行比较。
如果您在java-8
上,则可以一行完成:
Collections.sort(list, (o1, o2) ->
Float.compare(Float.parseFloat(o1.split(" ")[0]), Float.parseFloat(o2.split(" ")[0])));
答案 1 :(得分:-1)
尝试一下。这应该工作。主要逻辑是在compareTo
方法中。
import java.util.ArrayList;
import java.util.Collections;
public class Sort
{
public static void main(String[] args)
{
ArrayList<Entry> entries = new ArrayList<>();
entries.add(new Entry("1", "bbbb london"));
entries.add(new Entry("1.1", "aaaa nyc"));
entries.add(new Entry("1.10", "cccc jaipur"));
entries.add(new Entry("1.2", "test test"));
entries.add(new Entry("1.11", "test1 test1"));
Collections.sort(entries);
for (Entry e : entries)
{
System.out.println(e);
}
}
}
class Entry implements Comparable<Entry>
{
String index;
String value;
int major;
int minor;
Entry(String index, String value)
{
this.index = index;
this.value = value;
String[] array = index.split("\\.");
if (array.length == 2)
{
major = Integer.valueOf(array[0]);
minor = Integer.valueOf(array[1]);
}
else if (array.length == 1)
{
major = Integer.valueOf(array[0]);
}
else
{
throw new IllegalArgumentException("Invalid index : " + index);
}
}
@Override
public int compareTo(Entry otherEntry)
{
if (this.major < otherEntry.major)
{
return -1;
}
else if (this.major > otherEntry.major)
{
return 1;
}
else
{
if (this.minor < otherEntry.minor)
{
return -1;
}
else if (this.minor > otherEntry.minor)
{
return 1;
}
else
{
return 0;
}
}
}
@Override
public String toString()
{
return index + " " + value;
}
}