我需要在java中对列表进行排序,如下所示:
List包含这样的对象集合,
List list1 = {obj1, obj2,obj3,.....};
我需要具有“最低价值”和“重复名称应该避免”的最终列表。
例如:
List list1 = {[Nellai,10],[Gujarath,10],[Delhi,30],[Nellai,5],[Gujarath,15],[Delhi,20]}
排序后,我需要这样的列表:
List list1 = {[Nellai,5],[Gujarath,10],[Delhi,20]};
我的名单中有2德里(30,20)。但我只需要一个票价最低的德里(20)。
如何在java中做到这一点?
Gnaniyar Zubair
答案 0 :(得分:4)
如果订单无关紧要,解决方法是使用Map[String, Integer]
,每次找到新城镇时添加一个条目,每次存储的值小于存储的值时更新值,然后输入zip将所有对分成一个列表。
答案 1 :(得分:1)
我会分两个阶段来完成。
使用自定义比较器对列表进行第一次排序。
其次,遍历列表,对于重复的条目(现在它们彼此相邻,只要你正确地比较你的比较器),删除具有更高值的条目。
答案 2 :(得分:1)
与@Visage答案几乎相同,但顺序不同:
public class NameFare {
private String name;
private int fare;
public String getName() {
return name;
}
public int getFare() {
return fare;
}
@Override public void equals(Object o) {
if (o == this) {
return true;
} else if (o != null) {
if (getName() != null) {
return getName().equals(o.getName());
} else {
return o.getName() == null;
}
}
return false;
}
}
....
public Collection<NameFare> sortAndMerge(Collection<NameFare> toSort) {
ArrayList<NameFare> sorted = new ArrayList<NameFare>(toSort.size());
for (NameFare nf : toSort) {
int idx = sorted.getIndexOf(nf);
if (idx != -1) {
NameFare old = sorted.get(idx);
if (nf.getFare() < old.getFare()) {
sorted.remove(idx);
sorted.add(nf);
}
}
}
Collections.sort(sorted, new Comparator<NameFare>() {
public int compare(NameFare o1, NameFare o2) {
if (o1 == o2) {
return 0;
} else {
if (o1.getName() != null) {
return o1.getName().compareTo(o2.getName());
} else if (o2.getName() != null) {
return o2.getName().compareTo(o1.getName());
} else {
return 0;
}
}
}
});
}
答案 3 :(得分:1)
如果你想避免重复,可能像TreeSet这样的类比List更好。
答案 4 :(得分:0)
我会使用像这样的ArrayList:
ArrayList<Name> listOne = new ArrayList<Name>();
listOne.add(new Name("Nellai", 10);
listOne.add(new Name("Gujarath", 10);
listOne.add(new Name("Delhi", 30);
listOne.add(new Name("Nellai", 5);
listOne.add(new Name("Delhi", 20);
Collection.sort(listOne);
然后创建Name类
class name implements Comparable
{
private String name;
private int number;
public Name(String name, int number)
{
this.name= name;
this.number= number;
}
public String getName()
{
return this.name;
}
public int getNumber()
{
return this.number;
}
public int compareTo(Object otherName) // must be defined if we are implementing //Comparable interface
{
if(otherName instanceif Name)
{
throw new ClassCastException("Not valid Name object"):
}
Name tempName = (Name)otherName;
// eliminate the duplicates when you sort
if(this.getNumber() >tempName.getNumber())
{
return 1;
}else if (this.getNumber() < tempName.getNumber()){
return -1;
}else{
return 0;
}
}
}
我没有编译代码,它在这里编辑,所以你应该修复代码。并且还要弄清楚如何消除重复并仅打印最低的副本。
你也需要出汗。