arraylist来排列唯一的顺序

时间:2016-12-12 19:18:34

标签: java arrays arraylist

所以我试图通过一个具有一定强度值的物体的arraylist,根据它们的强度值,它们会根据它进入更大的2D阵列。因此,如果它们的强度值为0,那么它们会进入较大值的第0个数组,这就是我的代码到目前为止的样子

private ArrayList<Battleable> arr;


public BattleDeck() {
    arr = new ArrayList<Battleable>(); 
    for (Battleable creature: arr){ 
        arr.add(creature); 
    }

}

public Battleable[][] export2Darray() { 
    //returns a two-dimensional ragged array where each row  
    //  contains a deep copy of all of the Battleable objects 
    //  in the BattleStack with the corresponding Level value 
    Battleable[][] retVal = new Battleable[10][]; 


    int k = 0; 

    for (int i = 0; i<arr.size(); i++){ 
        int levelOfObj = arr.get(i).getLevel();  
        if(levelOfObj == k) {
            //insert it into retVal[0][0]

        }

        }
    }

    return retVal; 
} 

我想知道我会怎么做?我如何语法上说&#34;得到强度为0的obj并将其置于我的2d数组的0 0位置

3 个答案:

答案 0 :(得分:1)

这里是使用ArrayLists的解决方案,我正在创建一个ArrayList,它将被强度引用,然后在其中我有另一个ArrayList将拥有所有的Battleable具有该强度等级的物体。

public ArrayList<ArrayList<Battleable>> exportBattleable() { 
    ArrayList<ArrayList<Battleable>> retVal = new ArrayList<ArrayList<Battleable>>();

    for (int i = 0; i < arr.size(); i++){
        retVal.get(arr.getLevel()).add(arr.get(i));
    }
    return retVal; 
}

现在,如果您要打印Battleable的所有strength = 3个对象,您可以这样做:

ArrayList<Battleable> strength3 = retVal.get(3);
for(Battleable battleable : strength3) {
    System.out.println(battleable.toString());
}

这样您就不必担心重新调整数组大小,具体取决于您添加的Battleable个对象数量,与强度级别相同,如果您决定使用0-9您想要使用0-20,您已经具备了向上或向下扩展的能力。

答案 1 :(得分:1)

使用Java 8流的解决方案:

// group Battleables ArrayList by strength
Map<Integer, List<Battleable>> map = 
    arr.stream().collect(Collectors.groupingBy(Battleable::getStrength));

结果是Map包含作为列表的Battleables作为其关键点。

如果您需要将结果作为锯齿状2D数组,请按以下方式对条目进行排序:

final Battleable[][] arrays = new Battleable[10][];
map.entrySet().forEach(entry -> {
    arrays[entry.getKey()] = entry.getValue().toArray(new Battleable[entry.getValue().size()]);
});

答案 2 :(得分:1)

由于数组在Java中具有固定大小,因此没有干净的方法将项添加到数组中。您每次都可以通过每次创建一个新数组(一个大于最后一个数组)并将数据从旧数组复制到新数组来调整数组大小,但这样会很麻烦,您将重新发明名为{{1的轮子}}。 Modus Tollens有一个很好的答案,但它使用了一些稍微高级的Java 8概念。这是没有它们的一种方法:

ArrayList