从另一个对象列表中的列表中获取对象
get object from list that is in another list of objects
所以,我有 2 个对象
</p>
<pre><code>public class Vehiculo {
private Integer idVeiculo;
private List<OpcionesColores> colores;
private String marca;
//getter and setter
和
<pre><code>public class OpcionesColores {
private String puerta;
private String techo;
private String rines;
//getter and setter
现在主要class
<pre><code>package cl.poc;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.slf4j.LoggerFactory;
public class Recorrido {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(Recorrido.class);
public static void main(String[] args) {
OpcionesColores color1 = new OpcionesColores("Rojo", "Azul", "Negro");
OpcionesColores color2 = new OpcionesColores("Rojo", "Amarillo", "Black");
OpcionesColores color3 = new OpcionesColores("Rojo", "Blanco", "Marron");
OpcionesColores color4 = new OpcionesColores("Rojo", "Azul", "Negro");
List<OpcionesColores> colores = new ArrayList<>();
colores.add(color1);
colores.add(color2);
colores.add(color4);
List<OpcionesColores> colores2 = new ArrayList<>();
colores2.add(color1);
colores2.add(color2);
colores2.add(color3);
colores2.add(color4);
List<OpcionesColores> colores3 = new ArrayList<>();
colores3.add(color1);
colores3.add(color2);
colores3.add(color4);
Vehiculo auto = new Vehiculo(1, colores, "mazda");
Vehiculo auto2 = new Vehiculo(2, colores2, "nissan");
Vehiculo auto3 = new Vehiculo(3, colores3, "toyota");
List<Vehiculo> autos = new ArrayList<>();
autos.add(auto);
autos.add(auto2);
autos.add(auto3);
// autos.stream().forEach(
// (autosLoop) -> colores.stream().filter(c -> c.getTecho().equalsIgnoreCase("blanco")).collect(
// Collectors.toList()));
// autos.stream().forEach((autosLoop) -> colores.stream().forEach(System.out::println));
Vehiculo vehiculoFinal = new Vehiculo();
for (Vehiculo vehiculo : autos) {
for (OpcionesColores opcionesColores : vehiculo.getColores()) {
if (opcionesColores.getTecho().equalsIgnoreCase("Blanco")) {
vehiculoFinal = vehiculo;
System.out.println(opcionesColores);
break;
}
}
}
System.out.println(vehiculoFinal);
}
}
我需要得到带有“OpcionesColores.techo”的“vehiculo”是“blanco”。我尝试使用 lambda 表达式,但对我不起作用。
我知道我是否会使用另一个 OpcionesColores 实例,然后删除 vehiculo 所有项目都不是 blanco 是可以的,但我需要一个很快的方法来做到这一点
谢谢!
您必须处理潜在的 NullPointerException
Vehiculo vehiculoFinal2 = autos.stream().filter(Objects::nonNull).filter(vehiculo ->
Objects.nonNull(vehiculo.getColores()) && vehiculo.getColores().stream().filter(Objects::nonNull)
.anyMatch(opcionesColores ->
Objects.nonNull(opcionesColores.getTecho()) &&
opcionesColores.getTecho().equalsIgnoreCase("Blanco"))
).findFirst().orElse(null);
所以,我有 2 个对象
</p>
<pre><code>public class Vehiculo {
private Integer idVeiculo;
private List<OpcionesColores> colores;
private String marca;
//getter and setter
和
<pre><code>public class OpcionesColores {
private String puerta;
private String techo;
private String rines;
//getter and setter
现在主要class
<pre><code>package cl.poc;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.slf4j.LoggerFactory;
public class Recorrido {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(Recorrido.class);
public static void main(String[] args) {
OpcionesColores color1 = new OpcionesColores("Rojo", "Azul", "Negro");
OpcionesColores color2 = new OpcionesColores("Rojo", "Amarillo", "Black");
OpcionesColores color3 = new OpcionesColores("Rojo", "Blanco", "Marron");
OpcionesColores color4 = new OpcionesColores("Rojo", "Azul", "Negro");
List<OpcionesColores> colores = new ArrayList<>();
colores.add(color1);
colores.add(color2);
colores.add(color4);
List<OpcionesColores> colores2 = new ArrayList<>();
colores2.add(color1);
colores2.add(color2);
colores2.add(color3);
colores2.add(color4);
List<OpcionesColores> colores3 = new ArrayList<>();
colores3.add(color1);
colores3.add(color2);
colores3.add(color4);
Vehiculo auto = new Vehiculo(1, colores, "mazda");
Vehiculo auto2 = new Vehiculo(2, colores2, "nissan");
Vehiculo auto3 = new Vehiculo(3, colores3, "toyota");
List<Vehiculo> autos = new ArrayList<>();
autos.add(auto);
autos.add(auto2);
autos.add(auto3);
// autos.stream().forEach(
// (autosLoop) -> colores.stream().filter(c -> c.getTecho().equalsIgnoreCase("blanco")).collect(
// Collectors.toList()));
// autos.stream().forEach((autosLoop) -> colores.stream().forEach(System.out::println));
Vehiculo vehiculoFinal = new Vehiculo();
for (Vehiculo vehiculo : autos) {
for (OpcionesColores opcionesColores : vehiculo.getColores()) {
if (opcionesColores.getTecho().equalsIgnoreCase("Blanco")) {
vehiculoFinal = vehiculo;
System.out.println(opcionesColores);
break;
}
}
}
System.out.println(vehiculoFinal);
}
}
我需要得到带有“OpcionesColores.techo”的“vehiculo”是“blanco”。我尝试使用 lambda 表达式,但对我不起作用。 我知道我是否会使用另一个 OpcionesColores 实例,然后删除 vehiculo 所有项目都不是 blanco 是可以的,但我需要一个很快的方法来做到这一点
谢谢!
您必须处理潜在的 NullPointerException
Vehiculo vehiculoFinal2 = autos.stream().filter(Objects::nonNull).filter(vehiculo ->
Objects.nonNull(vehiculo.getColores()) && vehiculo.getColores().stream().filter(Objects::nonNull)
.anyMatch(opcionesColores ->
Objects.nonNull(opcionesColores.getTecho()) &&
opcionesColores.getTecho().equalsIgnoreCase("Blanco"))
).findFirst().orElse(null);