gpt4 book ai didi

java - 如何在java中对列表对象(int)进行排序?

转载 作者:行者123 更新时间:2023-12-01 14:45:08 25 4
gpt4 key购买 nike

我对java编程完全陌生,我已经被这个问题困扰了两周了!我不太确定如何描述问题,所以我基本上添加了整个代码。我想做的基本上是按值对 li.Poeng 进行排序。

    String getYear = yearFrom.getSelectedItem().toString();
String leFile = "http://www.it.hiof.no/~borres/commondata/fotballstatistikk/CSV/data" + getYear + ".txt".trim();

List<Functions> filData = Functions.setupList(leFile);


String fra = yearFrom.getSelectedItem().toString() + ":" + monthFrom.getSelectedItem().toString() + ":" + dayFrom.getSelectedItem().toString();
String til = yearTo.getSelectedItem().toString() + ":" + monthTo.getSelectedItem().toString() + ":" + dayTo.getSelectedItem().toString();



String[] fraDat = fra.split(":");

int fraDag = Integer.parseInt(fraDat[2]);
int fraMaan = Integer.parseInt(fraDat[1]);
int fraYear = Integer.parseInt(fraDat[0]);

int fraDato = fraYear * 10000 + fraMaan * 100 + fraDag;



String[] tilDat = til.split(":");

int tilDag = Integer.parseInt(tilDat[2]);
int tilMaan = Integer.parseInt(tilDat[1]);
int tilYear = Integer.parseInt(tilDat[0]);

int tilDato = tilYear * 10000 + tilMaan * 100 + tilDag;

HashMap<String, TabellLinje> tabell = new HashMap<>();


//----------------------------------------------------------------------------------------------


for (int i = 0; i < filData.size(); i++) {

String[] kampdat = filData.get(i).getdato().split(":");
int dag = Integer.parseInt(kampdat[2]);
int maan = Integer.parseInt(kampdat[1]);
int year = Integer.parseInt(kampdat[0]);

int filDato = year * 10000 + maan * 100 + dag;


if (fraDato < tilDato) {
if (tilDato >= filDato) {

// Calculate points

int hMaal = Integer.parseInt(filData.get(i).gethMaal());
int bMaal = Integer.parseInt(filData.get(i).getbMaal());

String hLag = filData.get(i).gethLag();
String bLag = filData.get(i).getbLag();

TabellLinje hjemmelag;
TabellLinje bortelag;


if (tabell.containsKey(hLag))
{
hjemmelag = tabell.get(hLag);

} else {
hjemmelag = new TabellLinje();
hjemmelag.Navn = hLag;
tabell.put(hjemmelag.Navn, hjemmelag);
}

if (tabell.containsKey(bLag)) {
bortelag = tabell.get(bLag);

} else {
bortelag = new TabellLinje();
bortelag.Navn = bLag;
tabell.put(bortelag.Navn, bortelag);
}

if (hMaal > bMaal) {
hjemmelag.Poeng += 3;
hjemmelag.Matches++;
bortelag.Matches++;

} else if (hMaal == bMaal) {
hjemmelag.Poeng++;
bortelag.Poeng++;
hjemmelag.Matches++;
bortelag.Matches++;

} else if (bMaal > hMaal) {
bortelag.Poeng += 3;
hjemmelag.Matches++;
bortelag.Matches++;

}

hjemmelag.GoalsAgainst += bMaal;
hjemmelag.GoalsFor += hMaal;
bortelag.GoalsAgainst += hMaal;
bortelag.GoalsFor += bMaal;

}
}
}

// Output to GUI
textArea.removeAll();
List<TabellLinje> tabellListe = new ArrayList(tabell.values());

for (int i = 0; i < tabellListe.size(); i++) {
TabellLinje li = tabellListe.get(i);
textArea.add(li.Navn + " " + li.GoalsFor + " " + li.GoalsAgainst + " " + li.Poeng + " " + li.Matches);
}

}

代码按其应有的方式工作,预计我需要额外的代码来对 li.Poeng 变量进行排序,该变量是 TabellLinje 列表中的一个对象。

抱歉,描述很糟糕,代码也很困惑。感谢那位能帮助我的白衣骑士! :D

最佳答案

您可以使用ComparatorCollections.sort方法:

    List<TabellLinje> tabellListe = new ArrayList(tabell.values());
Collections.sort(tabellListe, new Comparator<TabellLinje>() {
@Override
public int compare(TabellLinje o1, TabellLinje o2) {
return o1.Poeng - o2.Poeng;
}
});

因此排序将使用Comparator来决定哪个值更高。排序是稳定的,因此相同的值保留在原来的位置。

但是,请遵守 java 命名约定 - 变量应为小写,“poeng”而不是“Poeng”。您可能也想考虑封装您的类。

关于java - 如何在java中对列表对象(int)进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15504564/

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