簡體   English   中英

將嵌套循環轉換為Java 8流

[英]Converting nested loops to Java 8 streams

我有以下嵌套for循環,我需要轉換為聲明代碼。

for (String variable : variables ){
      boolean validAttribute = false;
      if(variable.equals(SOME_CONSTANT)){
          validAttribute = true;
      }
      else {
         for(String attrName: attrNames){
            if(variableName.equals(attrName)){
                validAttribute = true;
                break;
            }
         }
      }
      if(!validAttribute){
          return false;
      }
 }

我能夠實現一些如何使用flatMap 但是,在第一個不匹配的條目中,循環使用的早期似乎並不高效。 還有其他更簡單的方法嗎?

(以下代碼似乎很難理解)

List<String> inValidVariables = attrNames.stream().flatMap(attrName -> variableNames.stream()
                            .filter(variableName -> !variableName.equals(attrName) && !variableName.equals(SOME_CONSTANT)))
                            .collect(Collectors.toList());
 return inValidVariables.size() ==0;

就個人而言,我會這樣解決這個問題

    variables.stream().allMatch((item) -> item.equals(SOME_CONSTANT) 
                                || attrNames.contains(item));

我認為流應該讓你的任務變得更容易而不是更復雜,這就是為什么我沒有將它用於內循環,因為你可以重構它。

這里是ideone的鏈接 ,您可以在其中運行這兩種方法

我認為這應符合您的要求:

variables.stream().noneMatch(variable-> !variable.equals(CONSTANT)&&attrNames.stream().noneMatch(attrName -> variable.equals(attrName)));

如果每個變量等於CONSTANT或其中一個attrNames,則返回true

否則它返回false (如果是任何與CONSTANT或任何attrName不匹配的變量)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM