首页 > 解决方案 > 如何在 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);

标签: java-8java-stream

解决方案


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);

代码未经测试。而且我不认为它的性能会比你所拥有的更好。


推荐阅读