Avatar billede rallylarsen Nybegynder
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
Avatar billede arne_v Ekspert
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 + "]";
    }
}
Avatar billede rallylarsen Nybegynder
25. marts 2009 - 17:36 #2
Hej Det er jo perfekt, takker =)
Avatar billede arne_v Ekspert
25. marts 2009 - 17:44 #3
saa vil jeg ligge et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester