有人可以告诉我,这里有什么问题。我的代码很好,直到我添加了这部分代码if(!tmp.isEmpty()){return e.isEmpty(); } 错误是:无法解析方法startsWith(java.lang.String)
@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或false的方法中):
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 :(得分:0)
e.isEmpty()
返回boolean
。在以下方法anyMatch
中,您希望在startsWith
上调用方法boolean
,但boolean
上不存在此方法。所以将代码更改为:
if (!tmp.isEmpty()) {
return ""; //or whatever string makes sense
}
答案 1 :(得分:0)
e
的类型为String
,而e.isEmpty()
的类型为Boolean
。
因此,函数的返回类型为Object
。
最后,Object
没有startsWith
函数,这与返回的原始String
类型相反,这就是编译器抱怨的原因。
答案 2 :(得分:0)
查看isEmpty()
的返回类型 - 它是boolean
。您打算如何startsWith
boolean true/false
? :) Stream预测它可以获得布尔值,因此它不能让你对它进行startsWith
。
if (!tmp.isEmpty()) {
return e.isEmpty();
}