此题定义了一个数组,数组添加了若干个元素,每个元素可以理解一个运单,每张运单有三个元素,分别是运单号,货主和发票金额,现在要对这批运单进行分组合并开票,分组规则是同一货主才能被分到一组,一张票包含的最大运单数为2 。分好组后对每组运单的开票金额进行累加即为发票的开票金额 。 请写一段代码,在右边控制台打印出每张票的货主和开票金额,比如上海运钢/170 上海运钢/82 江苏运钢/170 江苏运钢/90 11:47public class Main { public static void main(String[] args) { System.out.println("此题定义了一个数组,数组添加了若干个元素,每个元素可以理解一个运单,每张运单有三个元素,分别是运单号,货主和发票金额,现在要对这批运单进行分组合并开票,分组规则是同一货主才能被分到一组,一张票包含的最大运单数为2 。分好组后对每组运单的开票金额进行累加即为发票的开票金额 。 请写一段代码,在右边控制台打印出每张票的货主和开票金额,比如上海运钢/170 上海运钢/82 江苏运钢/170 江苏运钢/90 "); java.util.ArrayList<String> al = new java.util.ArrayList<>(); al.add("运单1/90"); al.add("运单号1/上海运钢/90"); al.add("运单号2/江苏运钢/90"); al.add("运单号3/上海运钢/80"); al.add("运单号4/上海运钢/82"); al.add("运单号5/江苏运钢/80"); al.add("运单号6/江苏运钢/80"); } }
时间: 2023-02-20 12:27:24 浏览: 102
Map<String, Integer> map = new HashMap<>();
for (String s : al) {
String[] arr = s.split("/");
String key = arr[1];
int value = Integer.parseInt(arr[2]);
if (map.containsKey(key)) {
map.put(key, map.get(key) + value);
} else {
map.put(key, value);
}
}
for (String key : map.keySet()) {
System.out.println(key + "/" + map.get(key));
}
相关问题
public class Main { public static void main(String[] args) { System.out.println("此题定义了一个数组,数组添加了若干个元素,每个元素可以理解一个运单,每张运单有三个元素,分别是运单号,货主和发票金额,现在要对这批运单进行分组合并开票,分组规则是同一货主才能被分到一组,一张票包含的最大运单数为2 。分好组后对每组运单的开票金额进行累加即为发票的开票金额 。 请写一段代码,在右边控制台打印出每张票的货主和开票金额,比如上海运钢/170 上海运钢/82 江苏运钢/170 江苏运钢/90 "); java.util.ArrayList<String> al = new java.util.ArrayList<>(); al.add("运单1/90"); al.add("运单号1/上海运钢/90"); al.add("运单号2/江苏运钢/90"); al.add("运单号3/上海运钢/80"); al.add("运单号4/上海运钢/82"); al.add("运单号5/江苏运钢/80"); al.add("运单号6/江苏运钢/80"); } }
public static void printGroup(ArrayList<String> al) {
HashMap<String, Integer> map = new HashMap<>();
for (String s : al) {
String[] arr = s.split("/");
String key = arr[1];
int value = Integer.parseInt(arr[2]);
if (map.containsKey(key)) {
map.put(key, map.get(key) + value);
} else {
map.put(key, value);
}
}
for (String key : map.keySet()) {
System.out.println(key + "/" + map.get(key));
}
}
go代码实现 gin 传入运单号查询运单号物流详情,如果redis缓存中本运单号已签收,则返回物流详情,如果redis缓存中不存在此运单号。调用接口去查询物流详情
以下是一个简单的Go代码实现,使用Gin框架和Redis缓存,根据传入的运单号查询运单号物流详情。如果Redis缓存中已有该运单号的签收信息,则直接返回签收信息;否则,调用接口查询物流详情,并将查询到的签收信息存入Redis缓存中。
```go
package main
import (
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/go-redis/redis"
)
type LogisticsInfo struct {
WaybillNumber string `json:"waybill_number"` // 运单号
Status string `json:"status"` // 物流状态
// 其它物流信息字段
}
func main() {
// 初始化Gin框架和Redis客户端
r := gin.Default()
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
// 定义路由接口
r.GET("/logistics/:waybill_number", func(c *gin.Context) {
waybillNumber := c.Param("waybill_number")
// 先从Redis缓存中查询是否有该运单号的签收信息
if val, err := client.Get(waybillNumber).Result(); err == nil {
// Redis缓存中已有该运单号的签收信息,直接返回该签收信息
c.JSON(http.StatusOK, gin.H{
"status": "success",
"data": val,
})
} else {
// Redis缓存中没有该运单号的签收信息,调用接口查询物流详情并存入缓存
logisticsInfo := queryLogisticsInfo(waybillNumber) // 调用接口查询物流详情
if logisticsInfo.Status == "已签收" {
// 如果物流状态为已签收,则将签收信息存入Redis缓存中
client.Set(waybillNumber, logisticsInfo, 24*time.Hour)
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"data": logisticsInfo,
})
}
})
// 启动Gin框架
r.Run(":8080")
}
func queryLogisticsInfo(waybillNumber string) *LogisticsInfo {
// TODO: 调用接口查询物流详情
// 返回的数据格式要与LogisticsInfo结构体保持一致
return &LogisticsInfo{
WaybillNumber: waybillNumber,
Status: "已签收",
}
}
```
在上述代码中,我们定义了一个LogisticsInfo结构体表示运单号的物流详情,包含运单号和物流状态等信息。在路由接口中,我们首先从Redis缓存中查询是否有该运单号的签收信息,如果有则直接返回该签收信息,否则调用接口查询物流详情并将查询到的签收信息存入Redis缓存中。注意,我们在存入Redis缓存时设置了过期时间为24小时,以避免缓存数据过期而导致的数据不一致问题。
阅读全文