优化代码 public static String mapToQueryString(Map<String, String> params) { StringBuilder query = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) { if (entry.getValue() != null) { if (query.length() > 0) { query.append('&'); } query.append(entry.getKey()).append('=').append(entry.getValue()); } } return query.toString();}
时间: 2024-02-25 12:56:59 浏览: 74
以下是我对上述代码进行优化的建议:
1. 使用Java 8中提供的Stream API来简化代码。可以使用Stream的map和filter方法来处理参数Map中的键值对,然后使用Collectors.joining方法将它们连接成一个字符串。
2. 在StringBuilder构造函数中指定容量大小,以避免在循环中不断扩容。
优化后的代码如下:
```
public static String mapToQueryString(Map<String, String> params) {
return params.entrySet().stream()
.filter(entry -> entry.getValue() != null)
.map(entry -> entry.getKey() + "=" + entry.getValue())
.collect(Collectors.joining("&"));
}
```
其中,Stream的filter方法过滤掉值为null的键值对,Stream的map方法将剩下的键值对映射为key=value的形式,最后使用Collectors.joining方法将它们连接成一个字符串,中间用&符号分隔。在StringBuilder构造函数中指定的容量大小为参数Map的大小乘以每个键值对的平均长度,以确保StringBuilder有足够的空间来存储最终的字符串。
相关问题
java 参数转key=value 代码优化版
以下是一个Java方法,可以将一个参数Map转换为key=value形式的字符串:
```java
public static String mapToQueryString(Map<String, String> params) {
StringBuilder query = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if (entry.getValue() != null) {
if (query.length() > 0) {
query.append('&');
}
query.append(entry.getKey()).append('=').append(entry.getValue());
}
}
return query.toString();
}
```
此方法首先创建一个StringBuilder实例,然后遍历参数Map中的每一个键值对。如果值不为null,则将键和值连接起来,中间用等号连接,并添加到StringBuilder中。如果StringBuilder已经包含了其他键值对,则在新的键值对前加上一个&符号。最终,方法返回StringBuilder中的字符串表示形式。
你可以将此方法放在一个工具类中,并在需要将参数Map转换为字符串时调用它。
生成一个接口调用的java代码 四个参数AccessKey ,sign,timestamp,nonce的参数位置是QUERY HEADER是hsPartyId body是json
下面是一个简单的示例代码,用于调用一个API,其中AccessKey、sign、timestamp和nonce作为查询参数,hsPartyId作为标头,JSON作为请求正文:
```
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class ApiCaller {
private static final String API_URL = "https://example.com/api";
private static final String ACCESS_KEY = "my_access_key";
private static final String SECRET_KEY = "my_secret_key";
private static final String HS_PARTY_ID = "my_hs_party_id";
public static void main(String[] args) throws Exception {
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String nonce = generateNonce();
// 构造查询参数
Map<String, String> queryParams = new HashMap<>();
queryParams.put("AccessKey", ACCESS_KEY);
queryParams.put("sign", generateSign(SECRET_KEY, timestamp, nonce));
queryParams.put("timestamp", timestamp);
queryParams.put("nonce", nonce);
// 构造标头
Map<String, String> headers = new HashMap<>();
headers.put("hsPartyId", HS_PARTY_ID);
// 构造请求正文
String requestBody = "{\"key\":\"value\"}";
// 发送请求
String response = sendGetRequest(API_URL, queryParams, headers, requestBody);
// 处理响应
System.out.println(response);
}
private static String sendGetRequest(String url, Map<String, String> queryParams, Map<String, String> headers, String requestBody) throws Exception {
StringBuilder sb = new StringBuilder(url);
if (!queryParams.isEmpty()) {
sb.append('?');
for (Map.Entry<String, String> entry : queryParams.entrySet()) {
sb.append(entry.getKey()).append('=').append(entry.getValue()).append('&');
}
sb.deleteCharAt(sb.length() - 1);
}
HttpURLConnection conn = (HttpURLConnection) new URL(sb.toString()).openConnection();
conn.setRequestMethod("GET");
for (Map.Entry<String, String> entry : headers.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
if (requestBody != null && !requestBody.isEmpty()) {
conn.setDoOutput(true);
conn.getOutputStream().write(requestBody.getBytes());
}
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
conn.disconnect();
return response.toString();
}
private static String generateSign(String secretKey, String timestamp, String nonce) throws Exception {
String message = timestamp + nonce;
SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
return Base64.encodeBase64String(rawHmac);
}
private static String generateNonce() {
return String.valueOf(new Random().nextInt(1000000));
}
}
```
阅读全文