Java 8 create custom object from list of objects

This is an extension for the question. I have a list of messages. I want to create a list of custom messages with their audit values.

list of ids from list of age using java 8

public class Messages {

int id;
String message;
int audId;
String audmessage;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public int getAudId() {
    return audId;
}

public void setAudId(int audId) {
    this.audId = audId;
}

public String getAudmessage() {
    return audmessage;
}

public void setAudmessage(String audmessage) {
    this.audmessage = audmessage;
}

public Messages(int id, String message, int audId, String audmessage) {

    this.id = id;
    this.message = message;
    this.audId = audId;
    this.audmessage = audmessage;
  }
}


public class CustomMessage {

int id;
String msg;
List<Aud> list;
//getters and setters
 }

public class Aud {

int id;
int message;
   //getters and setters
 }


  public class Demo {

    public static  void main(String args[]){
      List<Messages> list = new ArrayList<Messages>();
      list.add(new Messages(1,"abc",10,"a1"));
      list.add(new Messages(2,"ac",21,"a2"));
      list.add(new Messages(3,"adc",31,"a3"));
      list.add(new Messages(4,"aec",40,"a4"));
      list.add(new Messages(1,"abc",11,"a5"));
      list.add(new Messages(2,"ac",22,"a5"));
     }

      

Expected Result: 1, abc-> Checklist as (10, a1), (11, a5);

-1


source to share


1 answer


The answer here (if I understood correctly) is almost the same as in the previous question, with a few assumptions. First, your constructor is Aud

actually present and looks like this:

    public Aud(int id, String message) {
        this.id = id;
        this.message = message;
    }

      

And what you don't have Holder

for id and message

, so I used AbstractMap.SimpleEntry

.

 Map<SimpleEntry<Integer, String>, List<Aud>> map = list.stream()
            .collect(Collectors.groupingBy(
                 m -> new SimpleEntry<>(m.getId(), m.getMessage()),
                 Collectors.mapping(
                       m -> new Aud(m.getAudId(), m.getAudMessage()), 
                       Collectors.toList())));

      

EDIT

List<CustomMessage> l = list.stream()
            .collect(Collectors.groupingBy(m -> new SimpleEntry<>(m.getId(), m.getMessage()),
                    Collectors.mapping(m -> new Aud(m.getAudId(), m.getAudMessage()), Collectors.toList())))
            .entrySet()
            .stream()
            .map(e -> new CustomMessage(e.getKey().getKey(), e.getKey().getValue(), e.getValue()))
            .collect(Collectors.toList());

      



I have no idea what it means want to check for null using optional

.

If you are using setters and getters, you can replace this:

 m -> new Aud(m.getAudId(), m.getAudMessage())

      

from:

m -> {
    Aud aud = new Aud(); 
    aud.setId(m.getAudId()); 
    aud.setMessage(m.getAudMessage());
    return aud;
}

      

+1


source







All Articles