Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Implementar uma lambda dentro de um array_list.sort

Olá a todos estou estudando java e encontrei um assunto que não domino bem que são as lambdas. Estou tentando passar uma implementação de uma nesse codigo abaixo:

`

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Check {

public static void main(String[] args) {
    ArrayList<Person> people = new ArrayList<Person>();
    people.add(new Person("11111-A","David","Garcia",LocalDate.now(),63.2));
    people.add(new Person("14111-A","Elena","Lazaro",LocalDate.now(),60));
    people.add(new Person("13111-A","Marina","Garcia",LocalDate.now(),17.3));
    people.add(new Person("12111-A","Manuel","Garcia",LocalDate.now(),91));

    //Lambda dentro de um foreach buscando pelo sobrenome com a letra G
    people.forEach(value -> {
        if(value.getSurname().contains("G")) {
            System.out.println(value);
        }
    });

    //Lambda que ordene os sobrenomes em ordem alfabetica e se forem iguais  mostrar os que tem menor peso primeiro.
    people.sort((p1, p2) -> p1.getSurname().compareTo(p2.getSurname()));

    System.out.println(people);        
}
}

Como faria a segunda comparação dentro da lambda? Digo a parte de comparar o peso.

4 respostas

Olá Gabriel,

Existem algumas maneiras de fazer, irei mostrar a mais compacta e simples. Nesse exemplo apenas estou ordenando por ordem alfabética.

people.sort((Person p1, Person p2) -> p1.getSurname().compareTo(p2.getSurname()));
people.forEach((valor) -> System.out.println(valor.getSurname()));

Ola Adriano, isso enquanto estava aqui testando consegui fazer essa primeira parte acho que postamos na mesma hora que eu atualizei o meu post. Queria saber como colocar para ordenar com o peso também. Ali no enunciado pede para se os sobrenomes forem iguais colocar o de menor peso na frente.

solução!

Gabriel,

Acredito que você quer fazer isso:

SurName: Garcia Valor: 17.3
SurName: Garcia Valor: 63.2
SurName: Garcia Valor: 91.0
SurName: Lazaro Valor: 60.0

Você pode comparar multiplas validações usando essa forma do lambda:

people.sort(Comparator.comparing(Person::getSurname).thenComparing(Person::getValor));
 people.forEach((valor) -> System.out.println("SurName: " + valor.getSurname() + " Valor: " + valor.getValor()));

Obrigado pela ajuda!

Não conhecia esse thenComparing() marquei como solução.

Muito obrigado.