有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java提供了这个供应链问题的递归解决方案

假设我有两个表,协议和订单的结构如下

协议表

Product_ID  Seller  next_Supplier  SellingPrice
   1001        M       s1            90                                 
   1001       s1       s2            100
   1001       s1       s3            105
   1001       s1       s4            125
   1001       s2       s21           110
   1001       s3       s31           120
   1001       s4       s41           150

将其视为一个供应链问题,其中每一级都有不同的供应商,供应商将从制造商M处获得一个产品,并将达成协议,将产品提供给下一级供应商。协议表包含不同供应商之间的协议,例如s1已达成协议,以100美元的价格向s2提供产品。s2(s1的下一级供应商)已达成协议,以110美元的价格将产品提供给s21。s1还同意以一定价格将产品提供给s3和s4

订单表

Product_ID   Seller  Buyer  SellingPrice      
   1001        s21     c      125
   1001        s31     c      150
   1001        s41     c      200

现在,s21供应商终于找到了客户c,并以125美元的价格将产品卖给了他。现在,随着产品的销售,您需要编写一个java代码,说明如何将资金分配给层次结构中的供应商。对于Ex-s21,s2将向s1支付110美元,s2将向s1支付100美元,s1最终将向制造商M支付90美元

我已经为此编写了代码,但这是一个迭代解决方案,下面是代码

List<Agreement> agreementList; // [select* from Agreement]
List<Order> ordersList; // [select* from Orders]

for(Order o : ordersList){
  String seller = o.Seller;

  for(Agreement a : agreementList) {
    if(a.next_Supplier == seller) {
      System.out.println(a.next_Supplier + " will give " + a.sellingprice + " to " + a.seller);
      seller = a.Seller;
    }
  }
}

我想递归地解决它。但我不知道如何做到这一点。任何解决方案都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    重写如下:

    List<Agreement> agreementList; // [select* from Agreement]
    List<Order> ordersList; // [select* from Orders]
    
    Map<String, Agreement> agreementsBySupplier = 
      agreementList.stream().collect(Collectors.toMap(a -> a.next_Supplier, Function.identity()));
    
    for(Order o : ordersList){
      String seller = agreementsBySupplier.get(seller);
    
      System.out.println(a.next_Supplier + " will give " + a.sellingprice + " to " + a.seller);
    }
    

    这仍然会遍历所有协议一次(并将所有协议加载到内存中)

    如果你真的想提高效率,你可以使用不同的SELECT

    SELECT * FROM Orders o LEFT JOIN Agreement a ON o.seller = a.next_Supplier;