2017-04-13 111 views
0

有人可以告訴我這裏有什麼問題。我的代碼沒問題,直到我添加了這部分代碼if(!tmp.isEmpty()){return e.isEmpty(); } 錯誤是:無法解析方法startsWith(java.lang.String中)無法解決方法startsWith使用anyMatch

@Test 
    public void TestData() { 
     ArrayList<String> rootOpts = new ArrayList<String>(); 
     rootOpts.add("aa"); 
     rootOpts.add("bb"); 
     rootOpts.add("ac"); 
     ArrayList<String> allSiblings = new ArrayList<String>(); 
     allSiblings.add("aa"); 
     allSiblings.add("ac"); 
     allSiblings.add("abc"); 

     System.out.println("allMatch " + rootOpts.stream() 
       .map((e) -> { 
        System.out.println("e = " + e); 
        List<String> tmp = new ArrayList<String>(); 
        tmp.addAll(allSiblings); 
        String[] CHs = {"ab","aa","ac"}; 
        for (String chh : CHs) { 
         tmp.remove(chh); 
        } 
        if (!tmp.isEmpty()) { 
         return e.isEmpty(); 
        } 
        return e; 
       }) 
       .anyMatch(v -> v.startsWith("a"))); 
    } 

我試圖改寫下面的下面的代碼(該代碼包含在應該返回一個布爾值true的方法或假):

for (Option e : rootOpts) { 
      List<String> tmp = new ArrayList<String>(); 
      tmp.addAll(allSiblings); 
      if (e.getData() != null && !e.getData().getString().isEmpty()) { 
       String[] chs = {"ab","aa","ac"}; 
       for (String ch : chs) { 
        tmp.remove(ch); 
       } 
      } else { 
       return false; 
      } 
      if (!tmp.isEmpty()) { 
       return false; 
      } 
     } 
     return true; 

感謝您的幫助球員

回答

0

e.isEmpty()返回boolean。在以下方法anyMatch中,您想調用boolean上的方法startsWith,但此方法在boolean上不存在。所以,你的代碼更改爲:

  if (!tmp.isEmpty()) { 
       return ""; //or whatever string makes sense 
      } 
+0

添加這個不起作用:if(!tmp.isEmpty()){ return new ArrayList(); }。我的目標是如果我的tmp列表不是空的,我應該返回false。 –

0

eString類型,而e.isEmpty()Boolean類型。

因此,函數的返回類型爲Object

最後,Object沒有startsWith功能,違反該返回這就是爲什麼編譯器抱怨原有String類型。

0

看看isEmpty()的返回類型 - 它是boolean。你打算怎麼做startsWithboolean true/false? :) Stream預測可能會得到布爾值,因此它不能讓你對它做startsWith

if (!tmp.isEmpty()) { 
    return e.isEmpty(); 
}