簡體   English   中英

從嵌套列表中刪除項目 Java Stream

[英]Remove item from Nested list Java Stream

請提供一些幫助,我將不勝感激。 假設我有

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

我想單獨刪除航班號為flightNumberZOD498 ,我該怎么做 go?

我試過passengerBooking.removeIf(e -> e.getFlights().stream().anyMatch(flightToRemove))

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

這有點管用,但刪除了整個flight object,所以 output 現在變成了

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

請問我需要進行哪些修改才能刪除特定航班並獲得類似於

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

謝謝你

假設您有一個帶有對象List Flight的 class PassengerBooking ,並且passengerBooking變量表示一個對象List PassengerBooking

您可以遍歷List的項目。 然后,對於每個PassengerBooking object,使用相應的 getter 檢索航班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 class 的常見操作,您可以考慮實現一個自定義方法以通過其 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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM