将带有lambda表达式的Java 8代码转换为Java 6

use*_*714 2 java lambda java-6 java-8

有人可以帮助并向我解释如何将以下Java 1.8代码转换为Java 1.6吗?

private java.util.Optional<Edge<T>> findEdge(Node<T> node) 
{
    return edges.stream()
                .filter(edge -> edge.isBetween(this, node))
                .findFirst();
}

public boolean removeEdge(Node<T> node)
{
    *java.util.Optional<Edge<T>> optional = findEdge(node);*
    if (optional.isPresent())
    {
        return edges.remove(optional.get());
    }
    return false;
}

public boolean hasEdge(Node<T> node)
{
    return findEdge(node).*isPresent();*
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

假设edges是类型Collection<Edge>:

private Edge<T> findEdge(Node<T> node) 
{
    for (Edge edge : edges) {
        if (edge.isBetween(this, node)) {
            return edge;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

您必须迭代,edges直到找到与筛选条件匹配的edge.isBetween(this, node)边并返回该边.如果找不到,则返回null,因为您没有OptionalJava 6.

其他方法甚至更简单 - 因为你没有Optional包装你的方法Edge,你只需检查返回的值findEdge是否为null.

public boolean removeEdge(Node<T> node)
{
    Edge<T> e = findEdge(node);
    if (e != null)
    {
        return edges.remove(e);
    }
    return false;
}

public boolean hasEdge(Node<T> node)
{
    return findEdge(node) != null;
}
Run Code Online (Sandbox Code Playgroud)

  • @ user3337714一个可选项,您将始终使用该Optional包装的类型替换.与Streams一起使用的Lambda表达式必须替换为相关集合上的一些迭代. (2认同)