java 8从对象列表创建自定义对象 [英] java 8 creating custom object from a list of objects

查看:152
本文介绍了java 8从对象列表创建自定义对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是问题的扩展。我有一个消息列表。我想创建一个包含审计值的自定义消息列表。

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

使用java 8的年龄列表中的id列表

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"));
     }

预期产出为1,abc->审核清单为(10,a1) ),(11,a5);

Expected output is 1,abc->List of audits as (10,a1),(11,a5);

推荐答案

这里的答案(如果我理解正确的话)几乎和以前一样问题,有几个假设。首先,您的 Aud 构造函数实际存在,如下所示:

The answer here (if I understood correctly) is almost the same as in the previous question, with a couple of assumptions. First is that your Aud constructor is actually present and looks like this:

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

没有 a Holder for id和message ,所以我使用了 AbstractMap.SimpleEntry 而不是。

And than you do not have a Holder for id and message, so I've used AbstractMap.SimpleEntry instead.

 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())));

编辑

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());

我不知道想要使用可选应该是指。

如果你使用的是setter和getter,你可以替换它:

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

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

with:

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

这篇关于java 8从对象列表创建自定义对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆