无法使用anyMatch解析方法startsWith

时间:2017-04-13 14:01:16

标签: java

有人可以告诉我,这里有什么问题。我的代码很好,直到我添加了这部分代码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;

感谢您的帮助

3 个答案:

答案 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();
}