forked from winterbe/java8-tutorial
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPassengerReader.java
More file actions
114 lines (93 loc) · 4.08 KB
/
PassengerReader.java
File metadata and controls
114 lines (93 loc) · 4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.winterbe.java8.samples.orion;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class PassengerReader {
public static void main(String[] args) {
try (InputStream inputStream = PassengerReader.class.getResourceAsStream("dataset.csv");
InputStreamReader reader = new InputStreamReader(inputStream)) {
CSVReader csvReader = new CSVReader(reader);
List<String[]> records = csvReader.readAll();
Stream<Passenger> passengerStream = records.stream()
.skip(1)
.map(PassengerReader::parseToPassenger);
System.out.println("CASE 1 ");
case1(passengerStream);
System.out.println("CASE 2 ");
case2(records.stream()
.skip(1)
.map(PassengerReader::parseToPassenger));
System.out.println("CASE 3 ");
case3(records.stream()
.skip(1)
.map(PassengerReader::parseToPassenger));
} catch (IOException | CsvException e) {
e.printStackTrace();
}
}
private static Passenger parseToPassenger(String[] record) {
return new Passenger(
Integer.parseInt(record[0]),
record[1],
record[2],
record[3],
Integer.parseInt(record[4]),
record[5],
record[6],
record[7],
record[8],
record[9],
record[11],
record[12],
record[13],
record[14]
);
}
// case 1 japon yolcularin bulundugu havalanlarini ve burda bulunan yolcularin sayisini yazdir
private static void case1(Stream<Passenger> passengerStream) {
Predicate<Passenger> passengerPredicate= passenger -> "Japan".equals(passenger.getNationality());
passengerStream
.filter(passengerPredicate)
.collect(Collectors.groupingBy(Passenger::getAirportName, Collectors.counting()))
.forEach((k, v) -> {
System.out.println("Airport: " + k + " Count: " + v);
});
}
// case 2 yolculugu en cok iptal olan milliyetteki yolculari yazdir
private static void case2(Stream<Passenger> passengerStream) {
passengerStream
.filter(passenger -> "Cancelled".equals(passenger.getFlightStatus())) // Assuming "Canceled" indicates a canceled flight
.collect(Collectors.groupingBy(Passenger::getNationality, Collectors.counting()))
.entrySet().stream()
.sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue()))
.limit(1)
.forEach(entry -> {
System.out.println("Nationality: " + entry.getKey() + " Count: " + entry.getValue());
});
}
// case 3 yolculugu en cok On time olan en yakin yarihteki ilk 50 yolcuyu yazdir
private static void case3(Stream<Passenger> passengerStream){
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("[MM/dd/yyyy][M/d/yyyy]")
.toFormatter();
passengerStream
.filter(passenger -> "On Time".equals(passenger.getFlightStatus()))
.sorted(Comparator.comparing((Passenger passenger) -> LocalDate.parse(passenger.getDepartureDate(), formatter)).reversed())
.limit(100)
.map(passenger -> passenger.getFirstName()+" "+ passenger.getDepartureDate())
.forEach(System.out::println);
}
// case 4
private static void case4(Stream<Passenger> passengerStream) {
}
}