从另一个对象列表中的列表中获取对象

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);