Java中按字段分组的对象计数
我有一个班机和一个机场的班机,有好几次航班Java中按字段分组的对象计数,java,sorting,linked-list,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;
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...}
公共舱航班{
字符串flightNumber;
弦差;
字符串输出国;
串离;
字符串到达率;
字符串到达国家;
字符串到达;
//等等……}
公共级机场{
字符串名;
字符串城市;
弦国;
LinkedList航班;
//等等……}
在大学里,我有一项任务,就是为每个航班类别的出发国家/地区计算一个机场的航班数量。有什么算法可以做到这一点吗?
我想通过这个参数(departureCountry)对集合进行排序,但没有做出明确的决定。我将非常感谢您的帮助。我不打算在这里写全部代码,只写步骤
- 每个机场
- 保留一张出发国家的地图以供统计(即地图)
- 在机场的每一次航班
- 增加地图中出发国家/地区的计数 //就这样,你现在有了计数
考虑到谁只需要计数,根本不需要排序,也就是说,基本上是分组,上面的步骤解释了映射就足够了。我不打算在这里写全部代码,只写这些步骤
- 每个机场
- 保留一张出发国家的地图以供统计(即地图)
- 在机场的每一次航班
- 增加地图中出发国家/地区的计数 //就这样,你现在有了计数
考虑到谁只需要计数,根本不需要排序,也就是说,基本上是分组,上面的步骤中解释了映射就足够了。使用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}
}
}
import java.util.*;
导入静态java.util.stream.Collectors.*;
公共班机{
公共静态void main(字符串[]args){
//我为出发国制作了构造器,只是为了保持简单
List flights=Arrays.asList(
新航班(“美国”),
新航班(“英国”),
新航班(“CAN”),
新航班(“美国”),
新航班(“英国”)
);
地图飞行国家=
flights.stream()
.collect(分组方式(航班::getDepartureCountry,计数());
System.out.println(flightsPerCountry);
//{加拿大=1,美国=2,英国=2}
}
}
使用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}
}
}
import java.util.*;
导入静态java.util.stream.Collectors.*;
公共班机{
公共静态void main(字符串[]args){
//我为出发国制作了构造器,只是为了保持简单
List flights=Arrays.asList(
新航班(“美国”),
新航班(“英国”),
新航班(“CAN”),
新航班(“美国”),
新航班(“英国”)
);
地图飞行国家=
flights.stream()
.collect(分组方式(航班::getDepartureCountry,计数());
System.out.println(flightsPerCountry);
//{加拿大=1,美国=2,英国=2}
}
}
您可以在飞行中按起飞国家分组,统计属于这些组的航班。您可以在飞行中按起飞国家分组,统计属于这些组的航班。非常感谢!即使没有代码,您的解决方案也非常清晰:)非常感谢!即使没有代码,您的解决方案也非常清晰:)谢谢您的解决方案!非常出乎意料地解决了这个问题:)虽然我现在不能检查它,因为我有Java 7。谢谢你的解决方案!非常出乎意料的解决这个问题的方法:)虽然我现在不能检查它,因为我有Java7。