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 + "]";
    }
}