Untitled
unknown
plain_text
3 years ago
4.7 kB
10
Indexable
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class RideHailing2 {
public static void main(String[] args) throws ParseException {
String[] sendOrders = {
"s_order1,1,2022-02-11 12:00:00, airport1",
"s_order2,1,2022-02-11 12:30:00, airport1",
"s_order3,1,2022-02-11 12:10:00, airport1",
"s_order4,2,2022-02-12 12:30:00, airport2",
"s_order5,2,2022-02-12 18:27:00, airport2",
"s_order6,1,2022-02-12 19:30:00, airport2",
"s_order7,2,2022-02-12 20:15:00, airport2"
};
String[] pickupOrders = {
"p_order1,1,2022-02-11 12:20:00, airport1",
"p_order2,2,2022-02-11 14:30:00, airport1",
"p_order3,2,2022-02-12 12:45:00, airport2",
"p_order4,2,2022-02-12 12:15:00, airport2",
"p_order5,2,2022-02-12 19:20:00, airport2",
"p_order6,2,2022-02-12 20:30:00, airport2",
"p_order7,2,2022-02-12 20:00:00, airport2"
};
// parse the input strings and create Order objects
List<Order> sendOrderList = new ArrayList<>();
List<Order> pickupOrderList = new ArrayList<>();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (String orderStr : sendOrders) {
String[] orderArr = orderStr.split(",");
String id = orderArr[0];
int carType = Integer.parseInt(orderArr[1]);
Date bookTime = formatter.parse(orderArr[2]);
String airport = orderArr[3];
Order order = new Order(id, carType, bookTime, airport);
sendOrderList.add(order);
}
for (String orderStr : pickupOrders) {
String[] orderArr = orderStr.split(",");
String id = orderArr[0];
int carType = Integer.parseInt(orderArr[1]);
Date bookTime = formatter.parse(orderArr[2]);
String airport = orderArr[3];
Order order = new Order(id, carType, bookTime, airport);
pickupOrderList.add(order);
}
// match the send and pickup orders
Map<String, String> matchedOrders = matchOrders(sendOrderList, pickupOrderList);
// print the matched orders
System.out.println("Matched orders:");
for (Map.Entry<String, String> entry : matchedOrders.entrySet()) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
// print the single orders
System.out.println("Single orders:");
Set<String> singleOrders = new HashSet<>();
singleOrders.addAll(getSingleOrders(sendOrderList, matchedOrders.keySet()));
singleOrders.addAll(getSingleOrders(pickupOrderList, new HashSet<>(matchedOrders.values())));
for (String id : singleOrders) {
System.out.println(id);
}
}
public static Map<String, String> matchOrders(List<Order> sendOrders, List<Order> pickupOrders) {
Map<String, String> matchedOrders = new HashMap<>();
for (Order sendOrder : sendOrders) {
int minIdleTime = Integer.MAX_VALUE;
String matchedPickupId = null;
for (Order pickupOrder : pickupOrders) {
if (sendOrder.carType == pickupOrder.carType && sendOrder.airport.equals(pickupOrder.airport) &&
sendOrder.bookTime.before(pickupOrder.bookTime)) {
int idleTime = (int) (pickupOrder.bookTime.getTime() - sendOrder.bookTime.getTime()) / (60 * 1000);
if (idleTime < minIdleTime) {
minIdleTime = idleTime;
matchedPickupId = pickupOrder.id;
}
}
}
if (matchedPickupId != null) {
matchedOrders.put(sendOrder.id, matchedPickupId);
}
}
return matchedOrders;
}
public static List<String> getSingleOrders(List<Order> orders, Set<String> matchedIds) {
List<String> singleOrders = new ArrayList<>();
for (Order order : orders) {
if (!matchedIds.contains(order.id)) {
singleOrders.add(order.id);
}
}
return singleOrders;
}
public static class Order {
String id;
int carType;
Date bookTime;
String airport;
public Order(String id, int carType, Date bookTime, String airport) {
this.id = id;
this.carType = carType;
this.bookTime = bookTime;
this.airport = airport;
}
}
}
Editor is loading...