如何将具有多个条件的多个for循环转换为Java8流过滤器

ff29svar  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(111)

我仍然习惯于在Java中使用流过滤器。我花了很长时间把这个传统的for循环转换成它,因为它有多个列表和多个条件。

CarTypes type = CarTypes();
    String carVariant = type.isASedan();
    String carType = "Default";
    List<Cars> cars = new ArrayList<Cars>();

    List<Cars> oldCars = cars.stream()
            .filter(record -> record.getCarYear().equals("2000"))
            .collect(Collectors.toList());

    if (!oldCars.isEmpty()) {
        for (Cars oldCar : oldCars) {
            for (CarSpecs carspec : oldCars.getSpecs()){
                if (carspec.getCarName().equalsIgnoreCase("Toyota") 
                        && carSpec.getVariant().equalsIgnoreCase("Corolla")
                        || carSpec.getVariant().equalsIgnoreCase("Tacoma")) {
                    carVariant = carSpec.getVariant();
                    carType = Boolean.parseBoolean(type.isASedan()) ? "Corolla" : "Tacoma";
                }
            }
        }
    }
sr4lhrrt

sr4lhrrt1#

请尝试以下操作。
我通常只是链接 filter 调用。

carVariant
    = cars.stream()
          .filter(record -> record.getCarYear().equals("2000"))
          .filter(x -> {
              CarSpecs carspec = x.getSpecs();
              return carspec.getCarName().equalsIgnoreCase("Toyota")
                  && carspec.getVariant().equalsIgnoreCase("Corolla")
                  || carspec.getVariant().equalsIgnoreCase("Tacoma");
          })
          .findFirst()
          .get()
          .getSpecs().getVariant();
carType = Boolean.parseBoolean(type.isASedan()) ? "Corolla" : "Tacoma";

在重新查看您的代码后,似乎 carVariant 可能是用于确定 carType 的内容。
如果是这种情况,请改用以下代码。

carType
    = Boolean.parseBoolean(
        cars.stream()
            .filter(record -> record.getCarYear().equals("2000"))
            .filter(x -> {
                CarSpecs carspec = x.getSpecs();
                return carspec.getCarName().equalsIgnoreCase("Toyota")
                    && carspec.getVariant().equalsIgnoreCase("Corolla")
                    || carspec.getVariant().equalsIgnoreCase("Tacoma");
            })
            .findFirst()
            .get()
            .getSpecs().getVariant().isASedan())
    ? "Corolla" : "Tacoma";

相关问题