将带有lambda表达式的Java 8代码转换为Java 6
有人能帮我解释一下如何将下面的Java1.8代码转换成Java1.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
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()) {...}