bom dia! como consulto objetos em uma lista pela data?

bom dia! como consulto objetos em uma lista pela data?

Poderia ajudar colocando o código dessa lista!
public class TesteMain {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
List<Pessoa> pessoas = new ArrayList<>();
Pessoa p1 = new Pessoa();
p1.setNome("Alex");
p1.setData_nasc(stringParaData("1988/06/07"));
pessoas.add(p1);
Pessoa p2 = new Pessoa();
p2.setNome("Maria");
p2.setData_nasc(stringParaData("1991/05/12"));
pessoas.add(p2);
Pessoa p3 = new Pessoa();
p3.setNome("Joao");
p3.setData_nasc(stringParaData("1970/07/16"));
pessoas.add(p3);
Pessoa p4 = new Pessoa();
p4.setNome("Jose");
p4.setData_nasc(stringParaData("1981/09/06"));
pessoas.add(p4);
Pessoa p5 = new Pessoa();
p5.setNome("Paulo");
p5.setData_nasc(stringParaData("1998/07/16"));
pessoas.add(p5);
pessoas.forEach(x -> System.out.println(x));
}
public static class Pessoa {
private String nome;
private Date data_nasc;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getData_nasc() {
return data_nasc;
}
public void setData_nasc(Date data_nasc) {
this.data_nasc = data_nasc;
}
@Override
public String toString() {
return "Pessoa [nome=" + nome + ", data_nasc=" + data_nasc + "]";
}
}
}
Dessa forma tem um resultado favorável para consulta de data:
Date d = stringParaData("1998/07/16");
List<Pessoa> collect = pessoas.stream()
.filter(f -> f.getData_nasc() != null && f.getData_nasc().equals(d))
.collect(Collectors.toList());
collect.forEach(x -> System.out.println(x));
Exemplo prático:
Oi Dragoon! muito obrigado, esta sendo de grande ajuda, mas no caso eu gostaria de pegar o aniversariante do dia, como eu faria a consulta apenas pelo dia e e mes da data_nasc?
Crie uma função da seguinte assinatura:
public static Boolean getDayAndMonth(Date dt0, GregorianCalendar gregorianCalendar){
if (dt0 == null) return false;
GregorianCalendar getInfoDate = gregorianCalendar;
getInfoDate.setTime(dt0);
int d0 = getInfoDate.get(Calendar.DAY_OF_MONTH);
int m0 = getInfoDate.get(Calendar.MONTH);
getInfoDate.setTime(new Date());
int d1 = getInfoDate.get(Calendar.DAY_OF_MONTH);
int m1 = getInfoDate.get(Calendar.MONTH);
return (d0 == d1 && m0 == m1);
}
Essa função pega a data atual e a data do paramento e compara mês e ano se for igual retornada um dado boleano verdadeiro ou falso se for ao contrário e como utilizar?
Dessa forma no código anterior:
GregorianCalendar gregorianCalendar = new GregorianCalendar();
List<Pessoa> collect = pessoas.stream()
.filter(f -> getDayAndMonth(f.getData_nasc(), gregorianCalendar))
.collect(Collectors.toList());
collect.forEach(x -> System.out.println(x.getData_nasc()));
Obrigado, esse lance de trabalhar com datas esta me deixando um pouco confuso, eu so consigo trabalhar com dia, mes separadamente se eu utilizar a Classe Calendar? a classe Date nao conseue fracionar essa informaçao?
Se for verificar esses métodos estão obsoletos!
estão mesmo.
@Alexsandro_Andrade nessa api calendários são um array logo Janeiro = 0;
E respondendo o topico tenta usar java.time.LocalDate para fazer isso?
LocalDate tem algum método que posso consultar pelo dia e mes do Date?
LocalDate teste = LocalDate.parse("2018-01-01", DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println(teste.getMonthValue());
System.out.println(teste.getDayOfMonth());
(você muda o formatter para trocar o método de entrada)
Como foi explicado a você, janeiro é 0, fevereiro é 1 e assim por diante, coisas de Java e suas API. O amigo lhe passou um LocalDate teste ai e deixei como comentário e até código é bom deixar os estudos aqui também.
Só lembrando que a lógica de pesquisa é a mesma só o código talvez precisa ser refatorado!
obrigado, vou continuar estudando, em breve compartilho o código
Obrigado Pela ajuda @Dragoon e @Ofidomundo assim
@Test
public void listarComunicados() throws ParseException {
funcionariosList = funcionarioService.findAll();
funcionariosList.forEach(x -> System.out.println("lista - " + x));
aniverList = funcionariosList.stream().filter(f -> getDayAndMonth(f.getData_nasc()))
.collect(Collectors.toList());
aniverList.forEach(x -> System.out.println("agora vai - " + x));
}
public static Boolean getDayAndMonth(Date dt0) {
if (dt0 == null) {
return false;
}
//GregorianCalendar getInfoDate = gregorianCalendar;
GregorianCalendar gregorianCalendar = new GregorianCalendar();
gregorianCalendar.setTime(dt0);
int d0 = gregorianCalendar.get(Calendar.DAY_OF_MONTH);
int m0 = gregorianCalendar.get(Calendar.MONTH);
gregorianCalendar.setTime(new Date());
int d1 = gregorianCalendar.get(Calendar.DAY_OF_MONTH);
int m1 = gregorianCalendar.get(Calendar.MONTH);
return (d0 == d1 && m0 == m1);
}
dessa formar eu consigo consultar os aniversariantes do dia
muito obrigado!