ArrayList zu Objekt

dg87

Erfahrenes Mitglied
Hallo,

folgende Konstillation. Ich habe ein List Array, dass verschiedene Einträge hat. Ich möchte diese alle durchgehen. Wenn eine den Status = 3 hat, soll er diese rausschmeißen.
Ich komm einfach nicht klar, wie man das castet und so.

Wenn ich debugge sieht meine Variable 'result' so aus:
Code:
elementData
                   -> [0]
                            -> name = kurt
                            -> status = 2....
                   -> [1]
                             -> name = hans
                             -> status = 3
modCount 2
size           2

Heißt ich müsste auf die einzelnen Datas zugreifen. Aber ich blicks einfach nicht, wie ich das in einer for schleife machen soll.

So gehts nicht:
for(Object[] gruppeneintr : result)
und casten auf gruppeneinträge geht auch nicht. Soll ich dann einfach nur mit der List arbeiten und auf feste Werte prüfen?

Ich checks nicht, wie ich aus so einer zwei dimensionalen Liste was bekomme wo ich ordentlich damit arbeiten kann :(
 
So wie das in deiner Debug ansicht aussieht, ist es nicht nur Typ Object sondern etwas mit den beiden attributen name und status.

Für doch mal folgendes aus.
Java:
for(Object[] gruppeneintr : result){
				System.out.println(gruppeneintr.getClass().getName());
			}
Dann siehst du welchen Typ die elemente in der Schleifen haben.
Zu dem Typ hin, kannst du sie dann auch Casten.
Nach dem Cast, kannst du dann auch auf die Attribute zugreifen.
 
Dann siehst du welchen Typ die elemente in der Schleifen haben.
Zu dem Typ hin, kannst du sie dann auch Casten.
Nach dem Cast, kannst du dann auch auf die Attribute zugreifen.



Am einfachsten ist es, wenn man sicherstellen kann, dass alle Objekte eine gemeinsame Schnittstelle bedienen; z.B.

Java:
public interface StatusBehaftet {
   int getStatus
}

...
List<StatusBehaftet> foo = new ArrayList<StatusBehaftet>();
for (StatusBehaftet s : foo) {

if (s.getStatus() == 3) {
....
}

}

Wenn man ein Objekt nach seinem Typen fragen muss, um darauf zu reagieren ist meistens das Objektdesign faul.

Grüße,
gore
 
Habs gelöst, aber wieso bekomm ich jetzt durch das endResult.add(entry) einen Null Wert, bzw Null Pointer Exception?
Hier der Ausschnitt:
Code:
    List<ListGroupEntry> result = getgroupentrys();
    List<ListGroupEntry> endResult = null;
    
    // check groupentrys for secret groups and dont show if acc is not member
    for(ListGroupEntry entry : result){
      if(entry != null){
        Group group = getGroupManager().getGroup();
        // check group secret
        Long groupAccess = getGroupAccess();
        if(groupAccess.longValue() == Constante.SECRET){
          //check acc is not member of group
          GroupMember groupMember = getGroupManager().getGroupMember();
          if(groupMember == null){
           continue;
          }
        }
        endResult.add(entry);
     
      }
    }

Info: Namen abgeändert, weil ich nicht den Source reinhauen darf.... Es geht mir nur ums endResult.add(entry). Das ist gelb markiert und er sagt, hier kommt immer NULL raus, obwohl ich zur Liste (gleicher Typ) einen Eintrag hinzufügen möchte..
 
Zuletzt bearbeitet:
Häää aber ich ändere doch den Wert in der For Schleife und möchte ja jeden Einträg ädden, der nicht geheim ist...

edit: Aaaah moment, ich muss also gleich das was oben steht unten hinschreiben und adden, also ohne null, right?
 
Moin,
Java:
    List<ListGroupEntry> result = getgroupentrys();
    List<ListGroupEntry> endResult = null;  // <-- Deklaration
    
    // check groupentrys for secret groups and dont show if acc is not member
    for(ListGroupEntry entry : result)
   {
      if(entry != null)
      {
        Group group = getGroupManager().getGroup();
        // check group secret
        Long groupAccess = getGroupAccess();
        if(groupAccess.longValue() == Constante.SECRET)
        {
          //check acc is not member of group
          GroupMember groupMember = getGroupManager().getGroupMember();
          if(groupMember == null){
           continue;
        }
     }
     endResult.add(entry);  // <-- ist hier wohl bei ersten Zugriff NULL, oder ****
  }
}

Gruß
Klaus
 
Ich hatte es erst anders rum, dass result den Wert den ich nicht will remove aber das ging auch nicht, da kommt auch null. Ich versteh das Problem aber nicht die Lösung sorry
 
exakt.

List<ListGroupEntry> endResult = new ArrayList<ListGroupEntry>();

Die Liste ist ein Container für die Elemente darin und muss wie jeder andere komplexe Typ in Java erst mal instanziiert werden.

Grüße,
gore
 

Neue Beiträge

Zurück