Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen

beta20

Top Contributor
Hallo,

ich habe folgendes Problem.
Ich habe eine Liste: List<MyEntity> myEntityList;

Nun möchte alle MyEntity in weiteren Listen (also nicht nur eine Liste!) speichern, die die gleiche Referenz hat.
Also sprich eine Gruppierung vornehmen.

Bspw. ich habe 6 MyEntity Objekte in der myEntityList:
- MyEntity object1 = new MyEntity(1, "rot");
- MyEntity object2 = new MyEntity(2, "grün");
- MyEntity object3 = new MyEntity(3, "rot");
- MyEntity object4 = new MyEntity(4, "gelb");
- MyEntity object5 = new MyEntity(5, "gelb");
- MyEntity object6 = new MyEntity(6, "rot");

Nun möchte ich also:
1x Liste (rot) -> hat 3 Einträge (object1, object3, object6)
1x Liste (grün) -> hat 1 Eintrag (object2)

Wie kann ich das lösen?
Ich bräuchte ja dann später irgendwie ein Objekt von List<List<MyEntity>?

Danke für jede Hilfe
 
Oben im Beispiel habe ich es mit Farben gemacht... ich wollte es einfach halten als Beispiel.
In meinem richtigen Fall ist "rot", "grün" etc. dann getUser() -> also ein Objekt einer anderen Klasse...

Sprich ich möchte alle Objekte, die eine Referenz auf User1 haben in einer Liste, eine weitere Liste, die eine Referenz auf User2 haben etc.
Das ganze soll dann in einem Objekt sein, welches diese erstellten Listen wiederum enthält
 
Ja, dann halt Map<User, List<ObjektWelchesEineReferenzAufUserHat>> Eine Map ist ja EIN Objekt.
Aber die Frage ist doch woher haben? Willst du eine Liste in mehrere Listen aufteilen? Suchst du ein SQL Query? Willst du etwas mit Hibernate machen?

Sonst musst du mehr vom Use-Case erzählen oder hoffen, dass es jemand anderes als ich versteht, was du genau willst
 
Ja, genau.

Ok, dann hier mein konkreter Fall:
Ich habe eine Liste der Entität: "NetworkRequestItem":
List<NetworkRequestItem> networkRequestItemList

Ein NetworkRequestItem gehört einem Mandant (quasi der User).
NetworkRequestItem
- Mandatory

Nun möchte ich pro Mandant wieder eine List<NetworkRequestItem> networkRequestItemList erstellen. Also sprich dieser Liste nur diese Einträge hinzufügen, die von einem Mandant sind.

Hier hapert es noch:
Code:
List<NetworkRequestItem> networkRequestItemList;

Map<Mandatory, List<NetworkRequestItem>> hashMap = new HashMap<>();;

for (NetworkRequestItem networkRequestItem : networkRequestItemList) {

// Wie füge ich hier der Map die Einträge hinzu?
if(networkRequestItem.getMandatory().equals ?????)
-> Wie prüfe ich hier und füge es dann der Map hinzu?

}

Später möchte ich dann basierend auf dieser Map wiederum eine Schleife haben, die dann pro Gruppierung eine Aktion ausführt.
 
Benutz ne IDE und lass dir imports vorschlagen oder such 3 Sekunden im Internet (oder für die Faulen: java.util.stream.Collectors.groupingBy)
 
wie bekomme ich denn eine Referenz von der Referenz?
Habe bisher nichts mit Java8 Streams etc. gemacht

Code:
Map<MandatoryArticleNetworkItem, List<NetworkRequestItem>> hashMap = networkRequestItemList.stream().collect(
                Collectors.groupingBy(NetworkRequestItem::getMandatoryArticleNetworkItem.getMandatoryArticleNetwork));
 
Was ist eine Referenz von der Referenz?

Aus deinem obigen Code geht hervor, dass NetworkRequestItem eine Methode getMandatory hat - wenn dem nicht so ist solltest du mal deinen echten Code zeigen und nicht irgendwelche Beispiele, die du dann nicht ab deinen echten Code anpassen kannst.
 
getMandatory() ist nicht direkt in "NetworkRequestItem".

Ich bekomme getMandatory() von:
getMandatoryArticleNetworkItem().getMandatoryArticleNetwork().getMandatory()

Aber wie bekomme ich das in der Notation oben in groupingBy dann?
 
Java:
NetworkRequestItem::getMandatory
ist eine andere Schreibweise für
Java:
n -> n.getMandatory()
bzw.
Java:
(NetworkRequestItem n) -> n.getMandatory()
Also vermutlich...
Java:
n -> n.getMandatoryArticleNetworkItem().getMandatoryArticleNetwork().getMandatory()
 

Zurück
Oben