2017-05-11 13 views
-1

これは質問の拡張機能です。メッセージのリストがあります。カスタム値のリストを監査値とともに作成します。java 8オブジェクトのリストからカスタムオブジェクトを作成する

list of id from a 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")); 
    } 

期待出力として監査のABC->リスト、1である(10、A1)、(11、A5)。

+1

ます* *本当にこれがどのように行われるかのような質問を投稿停止する必要があります。あなたは少なくとも*いくつかの努力を提供する必要があります... ... – Eugene

答えて

1

ここでの答えは(私が正しく理解していれば)前の質問とほぼ同じですが、いくつかの前提があります。

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

そして、あなたはid and messageためHolderを持っていない、私は代わりにAbstractMap.SimpleEntryを使用していたよりもまず、あなたのAudコンストラクタが実際に存在し、このようになっていることです。

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

私が意味することになっているものwant to check for null using optional見当がつかない。あなたがセッターとゲッターを使用している場合

あなたがこれを置き換えることができます。

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

で:ところで

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

ちょうど私が使用したいと言いたいのは、getterとsetters.thereを使用する必要はありませんit.custommessageのIDは、Audのリストを持っているIDとメサージのホルダーです – coder25

+0

アップデートするには、私の結果としてCustomMessageのリストが必要です。すなわち、監査のリストを持つメッセージ – coder25

+1

@ coder25 *実際には 'CustomMessage'のリストを返そうとしていますか? – Eugene

関連する問題