基本上我有一個List<Map<String, Object>> listOfValue,我需要檢查物件是否是位元組的實體,然后將其編碼為字串,如下所示:
private void convertByteToBase64(List<Map<String, Object>> listOfValue) {
Object value = null;
if (!CollectionUtils.isEmpty(listOfValue)) {
for (Map<String, Object> map : listOfValue) {
if (!map.isEmpty()) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
value = entry.getValue();
if (value instanceof byte[]) {
entry.setValue(Base64.getEncoder().encodeToString((byte[]) value));
}
}
}
}
}
}
我正在使用 java 8 并且它按預期作業,但它是正確的做法還是在性能方面有更好的方法?
uj5u.com熱心網友回復:
當前的實作似乎沒問題,但是,檢查串列和嵌套映射是否為空似乎是多余的。
如果使用并行流來迭代串列/映射,則可能會實作一些性能改進。
private void convertByteToBase64(List<Map<String, Object>> listOfValue) {
Base64.Encoder base64encoder = Base64.getEncoder();
listOfValue.parallelStream()
.flatMap(map -> map.entrySet().parallelStream())
.filter(entry -> entry.getValue() instanceof byte[])
.forEach(entry -> entry.setValue(
base64encoder.encodeToString((byte[]) entry.getValue())
));
}
Base64.Encoder是執行緒安全的:類的實體Base64.Encoder對于多個并發執行緒使用是安全的。.
uj5u.com熱心網友回復:
或者,您可以使用 parallelStream 和過濾器,如下所示。
private void convertByteToBase64(List<Map<String, Object>> listOfValue) {
listOfValue.parallelStream().forEach(map -> {
map.entrySet().parallelStream().filter(entry->entry.getValue() instanceof byte[]).forEach(entry -> {
entry.setValue(Base64.getEncoder().encodeToString((byte[]) entry.getValue()));
});
});`
}
uj5u.com熱心網友回復:
public static void convertByteToBase64(List<Map<String, Object>> listOfValue) {
listOfValue.stream().parallel()
.forEach(map -> map.forEach((key,value)->{
if(value instanceof byte[]) {
map.put(key, Base64.getEncoder().encodeToString((byte[])value)) ;
}
}));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392117.html
