25. marts 2009 - 08:52
Der er
2 kommentarer og
1 løsning
Opdeling af Arraylist
Hej Eksperter.
Har fået stillet denne opgave.
Jeg har en arraylist af en bestemt objekt-type(ErrorFile), som har attributen (String userId). Min ArrayList er sorteret efter denne attribut. Jeg skal nu opdele denne liste i andre lister, alt efter hvilke userId det er, og derefter lægge det arraylisten ind i et nyt ArrayList. Har prøvet mig frem, men er ret ny til java.
kode :
public ArrayList<ArrayList<ErrorFile>> splitArray(ArrayList<ErrorFile> files){
ArrayList<ErrorFile> arr = files;
ArrayList<ErrorFile> arrTemp = new ArrayList<ErrorFile>();
ArrayList<ArrayList<ErrorFile>> output = new ArrayList<ArrayList<ErrorFile>>();
ErrorFile file = arr.get(0); //pegepind
Har prøvet både med en indre og ydre løkke osv. kan ikke lige knække den. Hielfe =)
Thomas
25. marts 2009 - 14:19
#1
Jeg vil foreslaa en Map<String,List<ErrorFile>> fremfor en List<List<ErrorFile>>.
Se eksempel nedenfor for lidt inspiration:
package march;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ArrayListSplit {
public static Map<Integer, List<Data>> split(List<Data> input) {
Map<Integer, List<Data>> res = new HashMap<Integer, List<Data>>();
for(Data d : input) {
if(!res.containsKey(d.getIval())) {
res.put(d.getIval(), new ArrayList<Data>());
}
res.get(d.getIval()).add(d);
}
return res;
}
public static void main(String[] args) {
List<Data> input = new ArrayList<Data>();
input.add(new Data(2, "2A"));
input.add(new Data(1, "1A"));
input.add(new Data(3, "3A"));
input.add(new Data(2, "2B"));
input.add(new Data(2, "2C"));
input.add(new Data(3, "3B"));
input.add(new Data(1, "1B"));
System.out.println("Usorteret");
for(Data d : input) {
System.out.println(d);
}
Collections.sort(input, new Comparator<Data>() {
@Override
public int compare(Data o1, Data o2) {
return o1.getIval() - o2.getIval();
}
});
System.out.println("Sorteret");
for(Data d : input) {
System.out.println(d);
}
Map<Integer, List<Data>> output = split(input);
System.out.println("Kun 2'ere");
for(Data d : output.get(2)) {
System.out.println(d);
}
}
}
class Data {
private int ival;
private String sval;
public Data(int ival, String sval) {
super();
this.ival = ival;
this.sval = sval;
}
public int getIval() {
return ival;
}
public void setIval(int ival) {
this.ival = ival;
}
public String getSval() {
return sval;
}
public void setSval(String sval) {
this.sval = sval;
}
@Override
public String toString() {
return "[" + ival + "," + sval + "]";
}
}