2016-11-26 28 views
1

我有一个机场的班级和班级,持有有多个航班的集合。在Java中按字段分组计数对象

public class Flight { 

String flightNumber;    
String departureCity; 
String departureCountry; 
String departure; 
String arrivalCity; 
String arrivalCountry; 
String arrival; 
//etc...} 

public class Airport { 

String name; 
String city; 
String country; 
LinkedList <Flight> flights; 
//etc...} 

我在大学有一项任务,要计算每个出发国家飞行场的航班数量。有没有算法可以做到这一点? 我想通过这个参数(出发国家)以某种方式对集合进行排序,但不能拿出一些明确的决定。我会很感激你的帮助。

+0

你可以做在飞行中类似组由出发国家和计数的航班属于这些群体。 –

回答

3

有使用Java 8流一种巧妙的方法:

import java.util.*; 
import static java.util.stream.Collectors.*; 

public class Main { 
    public static void main(String[] args) { 
     // I made constructor for departureCountry only to keep it simple 
     List<Flight> flights = Arrays.asList(
      new Flight("USA"), 
      new Flight("UK"), 
      new Flight("CAN"), 
      new Flight("USA"), 
      new Flight("UK") 
     ); 

     Map<String, Long> flightsPerCountry = 
      flights.stream() 
       .collect(groupingBy(Flight::getDepartureCountry, counting())); 


     System.out.println(flightsPerCountry); 
     // {CAN=1, USA=2, UK=2} 
    } 
} 
+1

谢谢你的解决方案!非常意外的方式来解决这个问题:)虽然我现在无法检查出来,因为我有Java 7。 –

3

我不打算在这里写整个代码,但只是步骤。

  • 每个机场
    • 保持地图departureCountry来算(即地图<字符串,整数>)
    • 在机场每个航班
      • 增量的计数出发国家在地图 //就是这样,你现在有计数
    • 是不是需要在所有因为谁只需要计数,即基本上为分组其中一个地图就足够了,如上述步骤解释

排序。

+1

非常感谢!即使没有代码,你的解决方案也很清晰:) –