在我们的项目中,我们将迁移到Java8,并测试它的新特性。
在我的项目中,我使用Guava谓词和函数,使用collections2.transform
和collections2.filter
过滤和转换一些集合。
在这次迁移中,我需要更改例如guava代码到Java8的更改。所以,我正在做的改变是:
List<Integer> naturals = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10,11,12,13);
Function <Integer, Integer> duplicate = new Function<Integer, Integer>(){
@Override
public Integer apply(Integer n)
{
return n * 2;
}
};
Collection result = Collections2.transform(naturals, duplicate);
到...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
使用guava调试代码非常符合要求,因为我可以调试每个转换过程,但我关心的是如何调试,例如.map(n->n*2)
。
@Hidden
@DontInline
/** Interpretively invoke this form on the given arguments. */
Object interpretWithArguments(Object... argumentValues) throws Throwable {
if (TRACE_INTERPRETER)
return interpretWithArgumentsTracing(argumentValues);
checkInvocationCounter();
assert(arityCheck(argumentValues));
Object[] values = Arrays.copyOf(argumentValues, names.length);
for (int i = argumentValues.length; i < values.length; i++) {
values[i] = interpretName(names[i], values);
}
return (result < 0) ? null : values[result];
}
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
由于Stuart Marks
,使用方法引用的方法还允许我调试转换过程:
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
由于Marlon Bernardes
回答,我注意到我的Eclipse没有显示它应该显示的内容,使用peek()有助于显示结果。
我在使用Eclipse或IntelliJ IDEA时调试lambda表达式通常没有问题。只需设置一个断点,并确保不检查整个lambda表达式(只检查lambda正文)。
另一种方法是使用peek
检查流的元素:
List<Integer> naturals = Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13);
naturals.stream()
.map(n -> n * 2)
.peek(System.out::println)
.collect(Collectors.toList());
更新:
在映射后插入换行符(
将允许您只为lambda表达式设置断点。调试器不显示return
语句的中间值并不罕见。将lambda更改为n->{int result=n*2;return result;}
将允许您检查结果。同样,在逐行步进时适当地插入换行符…
在我的项目中,我使用Guava谓词和函数来使用和筛选和转换一些集合。 在这次迁移中,我需要将guava代码更改为Java8更改。所以,我所做的改变是这样的: 到... 由于,使用方法引用的方法还允许我调试转换过程: 多亏了answer,我注意到我的Eclipse没有显示它应该显示的内容,而peek()的使用有助于显示结果。
本文向大家介绍Java中如何调试Lambda表达式,包括了Java中如何调试Lambda表达式的使用技巧和注意事项,需要的朋友参考一下 Lambda表达式由两部分组成,一个是参数,另一个是代码或表达式。 这两个部分由箭头运算符“->”分隔。 我们可以使用NetBeans,IntelliJ和Eclipse等不同的IDE来调试Java中的lambda表达式。 始终可以创建多行lambda表达式,并使用
本文向大家介绍Java8中Lambda表达式使用和Stream API详解,包括了Java8中Lambda表达式使用和Stream API详解的使用技巧和注意事项,需要的朋友参考一下 前言 Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。总得来说,Java8 的新特性使 Java 的运行速度更快、
本文向大家介绍Android Studio里如何使用lambda表达式,包括了Android Studio里如何使用lambda表达式的使用技巧和注意事项,需要的朋友参考一下 根目录下gradle文件配置 app下gradle文件配置 添加在project / app / build.gradle顶部的插件 在Android{…}中配置 以上所述是小编给大家介绍的Android Studio里如何
我在尝试使用lambda表达式时遇到了这个错误。
本文向大家介绍Python lambda表达式filter、map、reduce函数用法解析,包括了Python lambda表达式filter、map、reduce函数用法解析的使用技巧和注意事项,需要的朋友参考一下 前言 lambda是表达式,用于创建匿名函数,可以和filter、map、reduce配合使用。 本文环境Python3.7。 一、lambda表达式 lambda 只包含一个语句