Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe mich Vectoren und deren Einträgen beschäftigt. Mein Ziel war es bestimmte Vector-Einträge nach deren Objekt-Attributen zu entfernen bzw. zu filtern.
Ich habe das soweit folgendermaßen hinbekommen:
Java:
import java.util.Vector;
public class Main {
public static void main(String[] args) {
Vector<Thing> A = new Vector<Thing>();
A.add(new Thing(1)); //Konstruktor: Thing(int id)
A.add(new Thing(1));
A.add(new Thing(1));
A.add(new Thing(1));
A.add(new Thing(2));
A.add(new Thing(2));
MainClass.filter(A, 1); //"Filter"
for(Thing a : A){
System.out.println(a.getId());
}
System.out.println("------");
System.out.println("Eintraege: "+A.size());
}
static void filter(Vector<Thing> A, int id){
Vector<Thing> F = new Vector<Thing>();
for(Thing a : A){
if(a.getId()==id){
F.add(a);
}
}
for(Thing f : F){
A.remove(f);
}
}
}
Meine Frage hierzu ist, ob jemand ne idee hat, wie man das auch "eleganter" hinbekommt?
In etwa so:
Java:
for(Tokken a : A){
if(a.getId()==1){
A.remove(a);
}
}
Mir ist klar, dass das letztere Beispiel nicht funktioniert. Meine Frage ist nur aus reinem interesse entstanden. opcorn:
Ich persönlich würde die filter-Funktion so schreiben, das sie die originale Liste unverändert lässt und stattdessen eine neue gefilterte Liste zurück liefert.
Java:
import static org.junit.Assert.*;
import java.util.Vector;
import org.junit.Test;
public class Filter {
private Vector<Thing> A = new Vector<Thing>();
public Filter() {
A = new Vector<Thing>();
A.add(new Thing(1));
A.add(new Thing(1));
A.add(new Thing(1));
A.add(new Thing(1));
A.add(new Thing(2));
A.add(new Thing(2));
A.add(new Thing(3));
}
@Test
public void test() {
Filter filter = new Filter();
Vector<Thing> filterVector = filter.filter(A, 1);
assertEquals(3, filterVector.size());
for (Thing thing : filterVector) {
assertNotEquals("Wert wurde nicht gefiltert", 1, thing.getId());
}
}
private Vector<Thing> filter(Vector<Thing> srcVector, int filterId) {
Vector<Thing> resultVector = new Vector<>();
for (Thing thing : srcVector) {
if (thing.getId() != filterId)
resultVector.add(thing);
}
return resultVector;
}
class Thing {
private int id;
public Thing(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
}
Ich persönlich würde die filter-Funktion so schreiben, das sie die originale Liste unverändert lässt und stattdessen eine neue gefilterte Liste zurück liefert.