java - 从嵌套列表 Java 流中删除项目

我会很感激这方面的帮助。假设我有

"bookingId": 4,
            "flights": [
                {   ...
                    "flightNumber": "AUS382",
                },
                {    ...
                    "flightNumber": "ZOD498",
                }
            ]
        },

我想单独删除带有 ZOD498flightNumber 的航班,我该怎么做?

我试过 passengerBooking.removeIf(e -> e.getFlights().stream().anyMatch(flightToRemove))

其中 a 是谓词 - Predicate<Flight> flightToRemove = e -> "ZOD498".equals(e.getFlightNumber())

这有点工作,但删除了整个 flight 对象,所以输出现在变成

"bookingId": 4,
            "flights": [
            ]
        },

请问我需要进行哪些修改才能删除特定航班并获得类似于

"bookingId": 4,
            "flights": [
                {   ...
                    "flightNumber": "AUS382",
                }
                
            ]
        },

谢谢你

回答1

假设您有一个类 PassengerBooking,其中包含 List 对象 Flight,并且 passengerBooking 变量表示对象 PassengerBookingList

您可以遍历 List 的项目。然后,对于每个 PassengerBooking 对象,使用相应的 getter 检索 Flight 的 List,然后在返回的 Collection 上调用 removeIf 方法。

public class Main {
    public static void main(String[] args) {
        List<PassengerBooking> passengerBooking = new ArrayList<>(List.of(
                new PassengerBooking(4, new ArrayList<>(List.of(
                        new Flight("AUS382"),
                        new Flight("ZOD498")
                )))
        ));

        System.out.println(passengerBooking);

        for (PassengerBooking passenger: passengerBooking){
            passenger.getFlights().removeIf(f -> f.getFlightNumber().equals("ZOD498"));
        }

        System.out.println(passengerBooking);
    }
}

此外,如果这是您的 PassengerBooking 类的常见操作,您可以考虑实现一个自定义方法来通过其 id 删除 Flight

这是您的类实现的一个简单假设,用于测试上面的代码。

class PassengerBooking {
    private int bookingId;
    private List<Flight> flights;

    public PassengerBooking(int bookingId, List<Flight> flights) {
        this.bookingId = bookingId;
        this.flights = flights;
    }

    public int getBookingId() {
        return bookingId;
    }

    public List<Flight> getFlights() {
        return flights;
    }

    //Custom utility method
    public void removeFlight(String flightID){
        flights.removeIf(f -> f.getFlightNumber().equals("ZOD498"));
    }

    @Override
    public String toString() {
        return String.format("%d => %s", bookingId, flights);
    }
}

class Flight {
    private String flightNumber;

    public Flight(String flightNumber) {
        this.flightNumber = flightNumber;
    }

    public String getFlightNumber() {
        return flightNumber;
    }

    @Override
    public String toString() {
        return flightNumber;
    }
}

相似文章

随机推荐

最新文章