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

如何在java中对列表对象(int)进行排序?,java,list,sorting,Java,List,Sorting,我对java编程一无所知,我已经被这个问题困扰了两周了! 我甚至不知道如何描述这个问题,所以我基本上添加了整个代码。我想做的是根据价值对李白进行基本排序 String getYear = yearFrom.getSelectedItem().toString(); String leFile = "http://www.it.hiof.no/~borres/commondata/fotballstatistikk/CSV/data" + getYear + ".txt".trim

我对java编程一无所知,我已经被这个问题困扰了两周了! 我甚至不知道如何描述这个问题,所以我基本上添加了整个代码。我想做的是根据价值对李白进行基本排序

    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);
    }

}
String getYear=yearFrom.getSelectedItem().toString();
字符串leFile=”http://www.it.hiof.no/~borres/commondata/fotballstatistikk/CSV/data“+getYear+”.txt.trim();
List filData=函数。设置列表(leFile);
字符串fra=yearFrom.getSelectedItem().toString()+“:”+monthFrom.getSelectedItem().toString()+“:”+dayFrom.getSelectedItem().toString();
字符串til=yearTo.getSelectedItem().toString()+”:“+monthTo.getSelectedItem().toString()+”:“+dayTo.getSelectedItem().toString();
字符串[]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+FRAMAN*100+fraDag;
字符串[]tilDat=til.split(“:”);
int tilDag=Integer.parseInt(tilDat[2]);
int tilman=Integer.parseInt(tilDat[1]);
int tilYear=Integer.parseInt(tilDat[0]);
int tilDato=tilYear*10000+tilman*100+tilDag;
HashMap tabell=新的HashMap();
//----------------------------------------------------------------------------------------------
对于(int i=0;i=filDato){
//计分
int-hMaal=Integer.parseInt(filData.get(i).gethMaal());
int bMaal=Integer.parseInt(filData.get(i.getbMaal());
字符串hLag=filData.get(i).gethLag();
String bLag=filData.get(i).getbLag();
塔贝尔林杰·赫梅拉格;
塔贝尔林耶·博特拉格;
if(制表容器(hLag))
{
hjemelag=tabell.get(hLag);
}否则{
Hjemelag=new TabellLinje();
hjemelag.Navn=hLag;
tabell.put(hjemelag.Navn,hjemelag);
}
if(tabell.containsKey(bLag)){
bortelag=tabell.get(bLag);
}否则{
bortelag=新的TabellLinje();
bortelag.Navn=bLag;
tabell.put(bortelag.Navn,bortelag);
}
如果(hMaal>bMaal){
Hjemelag.Poeng+=3;
hjemelag.Matches++;
匹配++;
}else if(hMaal==bMaal){
hjemelag.Poeng++;
bortelag.Poeng++;
hjemelag.Matches++;
匹配++;
}否则如果(bMaal>hMaal){
bortelag.Poeng+=3;
hjemelag.Matches++;
匹配++;
}
Hjemelag.goalsanth+=bMaal;
hjemelag.GoalsFor+=hMaal;
bortelag.goalsantim+=hMaal;
bortelag.GoalsFor+=bMaal;
}
}
}
//输出到GUI
textArea.removeAll();
List tabellListe=newarraylist(tabell.values());
对于(inti=0;i
该代码的工作方式应该是这样的,希望我需要一个额外的代码来排序li.Poeng变量,它是TabellLinje列表中的一个对象

抱歉,描述糟糕,代码混乱。
感谢能帮助我的白骑士!:D

您可以使用
比较器和
集合。排序方法:

    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;
        }
    });
List tabellListe=newarraylist(tabell.values());
Collections.sort(tabellListe,newcomparator(){
@凌驾
公共整数比较(TabellLinje o1,TabellLinje o2){
返回o1.Poeng-o2.Poeng;
}
});
因此,排序将使用
比较器
来决定哪个值更高。排序是稳定的,所以相同的值保留在原来的位置


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

看看这里,谢谢你的快速回复!!我已经试着用Comperator simular来做你们的例子。但是我不能完全理解如何将返回值输出到GUI?比如我的输出代码的for循环中的值是如何“施加”的。这个程序基本上是在比赛中做一个表格,计算每个队的分数。如何使o1.Poeng-o2.Poeng的返回值与GUI输出动态一致?我的英语还远远不够完美,我感觉这可能让你们无法理解我在这里问的问题:Poh,我的TabellLinje类看起来是这样的:public类TabellLinje{public String Navn;public int Poeng;public int GoalsFor;public int goalsoff;public int Matches;}这将对数据进行就地排序,即
tabellListe
现在将在
for
循环运行和显示之前进行排序。如果数据可以更改,那么您需要在任何更改后对数据重新排序。啊哈,是的,数据确实会更改。数据按日期测量,因此,如果GUI中的日期更改,输出也会更改。但是既然我现在去拜访全班同学,李