我有一个FlightDatabase
类,其中包含许多AirJourney
个对象,这些空中旅行对象具有以下详细信息:始发机场,目的地机场和飞行英里数。
例如,一个AirJourney
对象可能具有“起点”:A,“目的地”:B和“英里”:400。
以下字符串数组表示数据库中存在的每个AirJourney
对象,第一个字母为起点,第二个为目的地,第三个为飞行里程数。
"AB800", "BC900", "CD400", "DE400", "BF400", "CE300", "DE300", "EB600", "CE200", "DC700", "EB500", "FD200"
在此字符串中,有许多重复的排行:DE400
和DE300
,然后是CE300
和CE200
。
我需要能够从AirJourney
返回FlightDatabase
个对象,并且还要忽略任何飞行距离更高的航班。
以下方法允许通过使用由两个字母组成的字符串从数据库中返回AirJourney对象,这两个字母将与对象内的始发和目的地机场相匹配。但是,此方法将返回第一个匹配的对象,而不是最少的里程数。
public AirJourney getFlightDetailsFromAirportPairing(String airportPair)
{
for(AirJourney journey : database)
{
String journeyPair = journey.getOriginAirport() + journey.getDestinationAirport();
if(airportPair.equals(journeyPair))
{
return journey;
}
}
return new AirJourney(0, null, null);
}
例如,如果我调用`getFlightDetailsFromAirportPairing(“ DE”),则将返回DE400航班,而我却希望返回DE300航班而忽略DE400航班。
我不确定如何修改此方法,以便它返回最低里程的航班。
答案 0 :(得分:1)
也许可以使用类似的东西?
想法是存储看到的最低值,每当看到具有较低值的东西时,就存储AirJourney对象和距离。
public AirJourney getFlightDetailsFromAirportPairing(String airportPair){
double lowestDistance = Double.MAX_VALUE;
AirJourney lowestDistanceAirJourney = null;
for (AirJourney journey : database) {
String journeyPair = journey.getOriginAirport() + journey.getDestinationAirport();
if(airportPair.equals(journeyPair)) {
if (lowestDistanceAirJourney == null || journey.getMiles() < lowestDistance) {
lowestDistanceAirJourney = journey;
lowestDistance = journey.getMiles();
}
}
}
return lowestDistanceAirJourney;
}
答案 1 :(得分:0)
public AirJourney getFlightDetailsFromAirportPairing(String airportPair)
{
Journey matchJourney = new AirJourney(0, null, null);
for(AirJourney journey : database)
{
String journeyPair = journey.getOriginAirport() + journey.getDestinationAirport();
if(airportPair.equals(journeyPair))
{
if(matchJourney.getMileage() == 0)
{
matchJourney = journey;
}
else if(journey.getMileage() < matchJourney.getMileage()
{
matchJourney = journey;
}
}
}
return matchJourney;
}
遍历所有旅程,并添加里程检查。
答案 2 :(得分:0)
使用Java 8流使用以下方法,它可能会对您有所帮助:
public static String getFlightDetailsFromAirportPairing(String airportPair) {
List<String> database = Arrays.asList("DE400", "DE300"); // you can get it from your database
String journeyPair = "DE"; // you can get it from your database
int minimumMiles = database.stream().map(value -> Integer.valueOf(value.split("(?<=\\D)(?=\\d)")[1])).collect(Collectors.toList()).stream().reduce((x, y) -> x.compareTo(y) <= 0 ? x : y).get();
if (airportPair.equals(journeyPair) ) {
return journeyPair + minimumMiles;
} else {
return null;
}
}
对于旅途中的最低里程,可以使用:
int minimumMiles = database.stream().map(journey -> journey.getMiles()).collect(Collectors.toList()).stream().reduce((x, y) -> x.compareTo(y) <= 0 ? x : y).get();
我假设getMiles()返回的是integer,如果不是,则必须使用Integer.valueOf(journey.getMiles())
它将获得airportPair的最小英里数,然后给出结果。
请告诉我这是否对您有用。