Salve galera, estou estudando listas e como usar class dentro de outras classes.
Tennho 3 classes no programa q estou criando.
Products.
Clients.
Restaurante.
Dentro de cliente tem uma lista de produtos.
Dentro de restaurante tem uma lista de clientes.
Estou tentando salvar uma ordem dentro do cliente em específico, mas meu indexOf só retorna -1.
(OBS: Ta bem loouco isso, mas é de proposito para entender bem como as coisas funcionam.)
Restaurant r1 = new Restaurant();
r1.creatAnClient(new Client("Adilson", 555));
Aqui eu faço uma pesquisa pelo ID pra saber se cliente existe.
Integer hasId = clientList.indexOf(clientList.stream().filter(x -> x.getID() == id).findFirst().orElse(null));
if (hasId != null ){
clientList.get(0).shopping(order);
System.out.println("HAS ID: " + hasId) // Aqui é teste é sempre retorna -1;
}
clientList.get(0).shopping(order);
Colocando 0 ele adiciona certinho e imprimi os dados do cliente com os produtos.
Queria era passar hasId dentro do get() para ser adicionado dentro do cliente responsável pelo id.
Como vc já está usando o filter(), não faz sentido estar usando o indexOf também.
Eu entendo que o indexOf vc usa quando vc já tem o objeto em mãos e só quer saber o indice dele dentro da lista. Já o filter() é o que vc precisa, pois vc não tem o objeto em mãos e precisa dele. O indice é irrelevante. Então ficaria algo assim:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String... args) {
class Order {
}
class Cliente {
private String nome;
private int id;
Cliente(String nome, int id) {
this.nome = nome;
this.id = id;
}
int getId() {
return this.id;
}
void shopping(Order order) {
}
}
Order order = new Order();
List<Cliente> clientList = new ArrayList<>();
clientList.add(new Cliente("aaa", 111));
clientList.add(new Cliente("bbb", 222));
clientList.add(new Cliente("ccc", 333));
clientList // @formatter:off
.stream()
.filter(c -> c.getId() == 222)
.findFirst()
.ifPresent(c -> c.shopping(order));
}
}
EDIT
Como é do tipo Integer, poderia ficar assim também:
Entendi. Entao nesse caso eu poderia usar o Objects.equals() para caso nao fosse passado o id ou fosse colocado null de proposito. Assim ele trataria esse null diferente do x.iguals(y).