La domanda è praticamente nel titolo. Sto cercando un algoritmo più efficiente della ricerca completa attraverso le raccolte.LEFT OUTER JOIN di due collezioni
ho due collezioni:
List<Map<TypeId, Object> > col1;
List<Entity> col2;
Dove
public enum TypeId{
PLAYER,
PARTNER,
PLATFORM,
AMOUNT
}
e
public class Entity{
private int player_id;
private int platform_id
private BigDecimal amount;
//GET, SET
}
La collezione col1
, che è del tipo List<Map<TypeId, Object> >
contiene solo PLAYER, PARTNER, PLATFORM
TypeId
s.
ho bisogno di scrivere un metodo:
public List<Map<TypeId, Object> > merge(List<Map<TypeId, Object> > col1, List<Entity> col2){
//Impl
}
che sta per produrre List<Map<TypeId, Object> >
ciascun l'ingresso entry
della mappa contiene ulteriori valori-chiave (AMOUNT, AMOUNT's value)
dove AMOUNT's value
è il valore del amount
campo dell'istanza e
di Entity
se e.player_id = entry.get(PLAYER) && e.platform_id = entry.get(PLATFORM)
e null
in caso contrario.
Infatti, l'operazione sarebbe uguale
col1 LEFT OUTER JOIN
col2 ON e.player_id = entry.get(PLAYER) && e.platform_id = entry.get(PLATFORM)
ESEMPIO:
col1:
[{PLATFORM: 1, PARTNER: 1, PLAYER: 1},
{PLATFORM: 1, PARTNER: 3, PLAYER: 1},
{PLATFORM: 2, PARTNER: 1, PLAYER: 2}
{PLATFORM: 3, PARTNER: 4, PLAYER: 5}]
col2:
[Entity(platform_id = 1, player_id = 1, amount = 100),
Entity(platform_id = 2, player_id = 2, amount = 200),
Entity(platform_id = 3, player_id = 4, amount = 300)]
result:
[{PLATFORM: 1, PARTNER: 1, PLAYER: 1, AMOUNT: 100},
{PLATFORM: 1, PARTNER: 3, PLAYER: 1, AMOUNT: 100},
{PLATFORM: 2, PARTNER: 1, PLAYER: 2, AMOUNT: 200},
{PLATFORM: 3, PARTNER: 4, PLAYER: 5, AMOUNT: null}]
Ci aiuterebbe a visualizzare il requisito in un modo migliore se si forniscono dati di esempio che mostrano anche l'input e l'output previsto. Spesso è più semplice modellare oggetti e interrogarli per i dati se si dispone di dati di input e output di esempio. – CKing
@ChetanKinger Potresti dare un'occhiata al campione? – user3663882
Quindi, "PARTNER" non influisce sulla condizione di "join"? – CKing