2017-04-13 132 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(); 
}