0

如果我使用 jdk 7 并想使用 lambda 表达式,我需要做哪些更改?我正在比较 2 个 xml 文件并希望忽略特定节点,因此使用此表达式

final Diff documentDiff = DiffBuilder
            .compare(expectedSource)
            .withTest(actualSource)
            .withNodeFilter(node -> !node.getNodeName().equals(someName))
            .build();

错误:令牌'-'上的语法错误,--预期

4

2 回答 2

1

尝试这个。

    final Diff documentDiff = DiffBuilder
        .compare(expectedSource)
        .withTest(actualSource)
        .withNodeFilter(new Predicate<Node>() {
            @Override
            public boolean test(Node node) {
                return !node.getNodeName().equals(someName);
            } 
        })
        .build();

这是多余的,但 JDK7 会接受它。我不知道你是否能意识到你想用这个做什么。

于 2017-06-06T07:32:33.393 回答
0

lambda 表达式不能在 java 7 中使用。语法本身只允许在 java8 中使用。但是,您可以通过编写更多代码或不使用 lamda 表达式来实现功能。您需要编写一个过滤器方法,如果它返回 true,则使用someName检查节点的名称,然后继续构建文档差异。您将需要编写多个语句和 if case 来检查名称是否相等。

您也可以使用 xslt 实现此目的。这对于长 xml 文件来说非常快,但是您需要编写大量代码,因为 xslt 是声明性的并且基于函数式编程。

于 2017-06-06T06:38:37.907 回答