简体   繁体   English

坚持在 Java 中返回 ArrayList

[英]Stuck on returning an ArrayList in Java

Edit, so I modified my method a bit like this:编辑,所以我修改了我的方法有点像这样:

import java.util.ArrayList

public ArrayList<ParkingTicket> getTicketArrayByLicenseNumber(String licensePlate){
        ArrayList<ParkingTicket> tickets = new ArrayList();
        for(ParkingTicket list: ticketList){
            String ticket = list.getCarLicensePlateNumber();
            if(ticket != null && ticket.equalsIgnoreCase(licensePlate)){
                tickets.add(list);
            }
        }
        return tickets;
    }

I think this will work.我认为这会奏效。 However when I test it using a test class, it gives me this error:但是,当我使用测试 class 对其进行测试时,它给了我这个错误:

testMethodGetTicketArrayByLicenseNumb
---
java.lang.AssertionError: PoliceOfficer.getTicketArrayByLicenseNumber must be return "[LParkingTicket;"
    at org.junit.Assert.fail(Assert.java:88)
    at PoliceOfficerTest.testMethod(PoliceOfficerTest.java:296)
    at PoliceOfficerTest.testMethodGetTicketArrayByLicenseNumb(PoliceOfficerTest.java:70)

Am I missing something here??我在这里错过了什么吗?

As per my assignment I need to create a method that takes a car licence Plate (a string) and return an array of any parking tickets object that is issued to the car.根据我的任务,我需要创建一个获取汽车牌照(字符串)并返回发给汽车的任何停车票 object 的数组的方法。

The parking ticket is part of an ArrayList.停车票是 ArrayList 的一部分。

private ArrayList<ParkingTicket> ticketList;

public ParkingTicket getTicketArrayByLicenseNumber(String licensePlate){
        
        for(ParkingTicket list: ticketList){
            String ticket = list.getCarLicensePlateNumber();
            if(ticket != null && ticket.equalsIgnoreCase(licensePlate)){
                return list;
            }
        }
        return null;
    }

Struck on what to do now as the code doesn't seem to return what I want...由于代码似乎没有返回我想要的东西,所以对现在该怎么做感到震惊......

You are returning object and not a list of objects.您正在返回 object 而不是对象列表。

If you are familiar with Java 8 streams, the problem can be solved as below:如果你熟悉 Java 8 流,问题可以解决如下:

private List<ParkingTicket> ticketList;

private List<ParkingTicket> getTicketArrayByLicenseNumber(String licensePlate) {
    return ticketList.stream()
            .filter(parkingTicket -> isLicensePlateNumberMatching(licensePlate, parkingTicket.getCarLicensePlateNumber()))
            .collect(Collectors.toList());
}

private boolean isLicensePlateNumberMatching(String licensePlate, String carLicensePlateNumber) {
    return carLicensePlateNumber != null && carLicensePlateNumber.equalsIgnoreCase(licensePlate);
}

For solution without using streams you should proceed with:对于不使用流的解决方案,您应该继续:

private List<ParkingTicket> getTicketArrayByLicenseNumber(String licensePlate) {
    List<ParkingTicket> ticketsMatching = new ArrayList<>();
    for (ParkingTicket parkingTicket : ticketList) {
        if(isLicensePlateNumberMatching(licensePlate, parkingTicket.getCarLicensePlateNumber())){
            ticketsMatching.add(parkingTicket);
        }
    }
    return ticketsMatching;
}

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

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