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

将带有lambda表达式的Java 8代码转换为Java 6,java,lambda,java-8,java-6,Java,Lambda,Java 8,Java 6,有人能帮我解释一下如何将下面的Java1.8代码转换成Java1.6吗 private java.util.Optional<Edge<T>> findEdge(Node<T> node) { return edges.stream() .filter(edge -> edge.isBetween(this, node)) .findFirst(); } public boole

有人能帮我解释一下如何将下面的Java1.8代码转换成Java1.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();*
}
private java.util.Optional findEdge(节点)
{
返回edges.stream()
.filter(边缘->边缘.isBetween(此,节点))
.findFirst();
}
公共布尔删除(节点)
{
*java.util.Optional=findEdge(节点)*
if(可选的.isPresent())
{
返回边.remove(可选.get());
}
返回false;
}
公共布尔hasEdge(节点)
{
返回findEdge(节点)。*isPresent()*
}

假设
边缘
属于
集合类型

可以利用类似Lambda的代码逻辑(函数式编程习惯用法):

com.google.common.base.Optional=fluenterable.from(边缘)
.filter(新谓词(){
@替代公共布尔应用(边){
返回edge.isBetween(XXX.this,节点);
}})
.first();
如果(opt.isPresent()){…}

com.google.common.base.Optional
也是泛型类。非ymous类使用起来既笨拙又冗长,但它不会改变您的代码逻辑。这是一个折衷方案,您可以选择此番石榴解决方案或循环解决方案。

这里提到的其他答案将起作用-即使用番石榴和/或手动转换Java 8 lambdas代码以与Java 6一起使用


另一种选择是使用该库,该库将Java8的lambda表达式和方法引用向后移植到Java7、6和5。请查看项目的Github页面,了解哪些功能被后端口化的最新详细信息(因为该库正在积极开发中)。

我实际上正在尝试运行一些用Java 1.8编译的代码,但系统不接受1.6以上的代码。谢谢你的详细解释。那么你能帮我解释一下以上两种方法吗。我是一个Java新手,所以每当我有可选或Lambda表达式时,我都会尝试将它们转换为更简单的形式,而不是条件和阻塞?@user3337714一个可选,您将始终替换为该可选包装的类型。与流一起使用的Lambda表达式必须替换为相关集合上的某些迭代。
private Edge<T> findEdge(Node<T> node) 
{
    for (Edge edge : edges) {
        if (edge.isBetween(this, node)) {
            return edge;
        }
    }
    return 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;
}
com.google.common.base.Optional<Edge> opt = FluentIterable.<Edge>from(edges)
    .filter(new Predicate<Edge>() {
        @Override public boolean apply(Edge edge) {
            return edge.isBetween(XXX.this, node);
        }})
    .first();

if(opt.isPresent()) {...}