2016-01-02 42 views
0

我有一個用類結果的對象填充的ArrayList,每個結果都有一個名爲value的屬性。我現在想要創建一個數組,其中填充了與ArrayList中相同的內存位置的引用,但現在爲了使對象的最高值位於第一個位置,第二個位置的第二高位等等。從未排序的ArrayList中創建排序後的數組

我已經在這裏搜索,但還沒有發現任何其他帖子喜歡它。

+6

爲什麼不只是對您當前的List Collections.sort(yourList,theComparator)進行排序; http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/,如果你確實需要保留舊的,請先克隆它......然後對新的進行排序...... –

+0

https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html可能比mkyong頁面更有用。 – VGR

+0

@ A.Bohlund你問的是比較器的用途。你的問題解決了嗎? – user3437460

回答

0

有多種方法可以使用Gauava或lambda表達式來解決它。

希望這個實現能夠解決您的問題。

package com; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class TestDemo { 


public static void main(String[] args) { 


    List <HockeyPlayer> players = new ArrayList <HockeyPlayer>(); 
    HockeyPlayer obj1 = new HockeyPlayer(); 
    obj1.goalsScored = 22; 
    players.add(obj1); 
    HockeyPlayer obj2 = new HockeyPlayer(); 
    obj2.goalsScored = 11; 
    players.add(obj2); 
    HockeyPlayer obj3 = new HockeyPlayer(); 
    obj3.goalsScored = 111; 
    players.add(obj3); 
    HockeyPlayer obj4 = new HockeyPlayer(); 
    obj4.goalsScored = 3; 
    players.add(obj4); 

    Collections.sort(players, new Comparator <HockeyPlayer>() { 
    @Override public int compare(HockeyPlayer player1, HockeyPlayer player2) { 
    return player1.goalsScored - player2.goalsScored; 
    } 

    }); 

    for (int i = 0; i < players.size(); i++) { 
    System.out.println(players.get(i).goalsScored); 
    } 

    HockeyPlayer array[] = new HockeyPlayer[players.size()]; 

    players.toArray(array); // contains reference 


    for (int i = 0; i < array.length; i++) { 
    System.out.println(array[i].goalsScored); 
    } 


} 

} 

class HockeyPlayer { 
public int goalsScored; 

}