计算Java中按字段分组的对象

时间:2016-11-26 21:31:21

标签: java sorting linked-list

我有一个机场航班和班级,持有几个航班的集合。

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...}

我在大学里有一项任务,计算一个机场的航班数量,用于每个出发国家的飞行课程。有没有算法呢? 我想通过这个参数(departureCountry)以某种方式对集合进行排序,但无法做出明确的决定。我将非常感谢你的帮助。

2 个答案:

答案 0 :(得分:3)

我不打算在这里编写完整的代码,只是步骤。

  • 每个机场
    • 保持departureCountry的地图计数(即地图&lt; String,整数&gt;)
    • 在机场的每个航班
      • 在地图中增加departureCountry的计数 //就是这样,你现在有了计数

根据需要计数的人,根本不需要排序,即基本上按照上述步骤解释地图就足够了。

答案 1 :(得分: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}
    }
}