Boa tarde pessoal,
Possuo duas listas de tamanhos diferentes, onde preciso preencher com o valor 0 alguns indices da lista 2, que só existem na 1. Exemplo:
As listas são essas acima. Eu preciso preencher com zero as colunas 00:30, 00:45, 01:00 e 01:15 que não existem na lista de baixo. Como eu posso fazer isso?
Olá. Não ficou clara a sua necessidade como por exemplo qual seria o valor a ser assumido na saida para as colunas existentes.
Por exemplo a coluna 00:00 que existe nas duas listas qual seria o valor a permanecer? ( 0.2 ou 0.222 ?)
Mas pre supondo algumas coisas gerei um exemplo pra ver se te ajuda:
package main;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class Guj {
public static void main( String[] args ){
// Lista 1
List<Hora> listaUm = new ArrayList<Hora>();
listaUm.add(new Hora("00:00", 0.2f));
listaUm.add(new Hora("00:15", 0.3f));
listaUm.add(new Hora("00:30", 0.175f));
listaUm.add(new Hora("00:45", 0.222f));
listaUm.add(new Hora("01:00", 0.452f));
listaUm.add(new Hora("01:15", 0.732f));
listaUm.add(new Hora("01:30", 0.111f));
listaUm.add(new Hora("01:45", 0.92f));
// Lista 2
List<Hora> listaDois = new ArrayList<Hora>();
listaDois.add(new Hora("00:00", 0.222f));
listaDois.add(new Hora("00:15", 0.452f));
listaDois.add(new Hora("01:30", 0.732f));
listaDois.add(new Hora("01:45", 0.212f));
// lista de filtros para gerar a saida
List<Hora> listaTres = new ArrayList<Hora>();
// percorrendo a lista um em busca de valores que não estejam presentes
for ( Hora hora : listaUm ) {
// testo cada item da lista 1 sobre a lista 2.
Optional<Hora> teste = listaDois.stream().filter(horaObj -> horaObj.equals(hora)).findAny();
if( teste.isPresent() ) {
// Se encontrar a coluna adiciona a coluna na lista 3 com o valor original
listaTres.add(teste.get());
} else {
// Se não encontrar a coluna adiciona a coluna na lista 3 com o valor 0
listaTres.add(new Hora(hora.getHora(), 0f));
}
}
// impressao da lista
listaTres.forEach(s -> {
System.out.println(s.getHora() + " - " + s.getValor());
});
}
}
class Hora {
private String hora;
private float valor;
public Hora( String hora , float valor ){
super();
this.hora = hora;
this.valor = valor;
}
public String getHora(){
return hora;
}
public void setHora( String hora ){
this.hora = hora;
}
public float getValor(){
return valor;
}
public void setValor( float valor ){
this.valor = valor;
}
boolean equals( Hora obj ){
return this.hora.equals(obj.getHora()) ? true : false;
}
}
SAIDA NO CONSOLE:
00:00 - 0.222
00:15 - 0.452
00:30 - 0.0
00:45 - 0.0
01:00 - 0.0
01:15 - 0.0
01:30 - 0.732
01:45 - 0.212
Espero que o exemplo ajude.
Boa tarde,
Essa comparação que você fez é exatamente o que eu preciso, mas não tô conseguindo implementar aqui, porque aqui no meu caso, eu tenho uma List para usar como refencia para comparar os horarios, mas estou comparando ela com um objeto de um outro tipo. E na hora de preencher a lista 3, não estou conseguindo também.
public class PulsoDto {
private String id;
private Equipamento equipamento;
private LocalDateTime data;
private Double valor;
private TipoVigenciaDemanda tipoVigenciaDemanda;
Acabei resolvendo de uma forma mais simples, que eu ainda não conhecia.
Mas muito obrigado pela ajuda, em outra hora esse código pode me ser útil.
Resolvi dessa forma:
List<String> horarios = new ArrayList<>();
horarios.add("00:00");
horarios.add("00:15");
horarios.add("00:30");
horarios.add("00:45");
horarios.add("01:00");
horarios.add("01:15");
horarios.add("01:30");
List<String> horariosAux = new ArrayList<>();
horarios.add("00:00");
horarios.add("01:00");
horarios.add("01:30");
for (int i = 0; i < horarios.size(); i++) {
if (!horariosAux.contains(horarios.get(i))) {
horariosAux.add(i, horarios.get(i));
}
}
Entendi. Mas no exemplo que voce diz que deu certo sua lista pode ficar desordemada. Não? Ou a ordenação não é importante?