Untitled
unknown
plain_text
2 years ago
4.7 kB
5
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...