繁体   English   中英

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

[英]get object from list that is in another list of objects

所以,我有 2 个 object

 public class Vehiculo { private Integer idVeiculo; private List<OpcionesColores> colores; private String marca; //getter and setter
public class OpcionesColores { private String puerta; private String techo; private String rines; //getter and setter

现在,主要的 class

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM