如何在Java中使用流获取输出



试图降低性能,我想使用流修改此代码。我试了一些方法,但没有得到确切的结果。

String[] arr = {"test", "test1", "test2"};
for (String a : arr){
String id = a.trim();
if (id.isEmpty()) {
continue;
}
Message childMsg = (Message)msg.get(id);
if (childMsg == null) {
continue;
}
String prodId = childMsg.getProperty("ID");
String expDate  = childMsg.getProperty("DATE");
String prodMapKey = prodId + "_" + expDate;
if(hasMap && formId != null){
if(childMsg.getProperty("ID").equals(formId)){
map.put(prodMapKey,childMsg);
}
} else {
map.put(prodMapKey,childMsg);
}
}

输出应该是,需要把值放在映射中,但是我不能这样做。

List<String> players = Arrays.asList(arr);
players.stream()
.filter(item-> !item.trim().isEmpty())
.filter(item -> msg.get(item)!= null)
.forEach(System.out::println);
Map<String, Message> map = Arrays.stream(arr)
.map(String::trim)
.filter(id -> ! id.isEmpty())
.map(msg::get)
.filter(Objects::nonNull)
.filter(childMsg -> ! (hasMap && formId != null)
|| childMsg.getProperty("ID").equals(formId))
.collect(Collectors.toMap(childMsg -> childMsg.getProperty("ID") + "_" + childMsg.getProperty("DATE"),
childMsg -> childMsg);

代码没有被测试。我也不指望它能比你的好。

最新更新