2016-07-12 5 views
1

に2つの観測を兼ね備えています。アンドロイドRxは私のような2つの観測を持っている第三1

Contactクラスがある:

class Contact { 
    String name; 
    String phoneNumber; 
} 

Messageクラスは次のとおりです。

class Message { 
    String content; 
    String fromNumber; 
} 

私はSMS /のWhatsAppのアプリのような古典的な "スレッド" ビューを再作成します。 は、だから私が観測を求め、連絡先やメッセージを「結合」したい、連絡先とメッセージ(複数可)のリストなので、MessageThreadクラスを含む各MessageThreadのようなある:

class MessageThread { 
    Contact contact; 
    List<Message> messages; 
} 

私のような何かをしました

 Observable<MessageThread> response = messages.zipWith(contacts, (message, contact) -> { 
     MessageThread thread = new MessageThread(); 
     thread.setContact(contact); 
     thread.addMessage(message); 
     return thread; 
    }); 

電話番号については「チェック」はありませんが、ロジックは完全にはありません。

Observablesを使用してこの問題にアプローチする方法を教えてください。ここで

+0

Rxを使用しないとどうしますか? –

+0

HashMap >のように、連絡先をループしてハッシュマップに追加します。 各メッセージについて、正しい連絡先のリストに追加し、値のないすべてのキーを削除します。 最後に、ハッシュマップでループし、MessageThreadのリストを作成します。 – user2653014

答えて

1

屋に行く:

contacts 
.toMap(contact->contact.phoneNumber, contact->contact) 
.flatMap(phones -> messages.toMultiMap(
    message -> phones.get(message.fromNumber)) 

これはあなたにMap<Contact, Collection<Message>>を与える必要があります。

編集:

contacts 
.toMap(contact->contact.phoneNumber, contact->contact) 
.flatMap(phones -> messages.groupBy(message -> phones.get(message.fromNumber)) 
.flatMap(group -> group.toList().map(list -> new MessageThread(group.getKey(), list))); 

もちろん、適切なMessageThreadコンストラクタが存在すると仮定すると:MessageThreadsのために、これはトリックを行う必要があります。

+0

MessageThreadsの別のテイクでコメントを編集しました。 –

関連する問題