草庐IT

lambda_sync

全部标签

java - Lambda 性能改进,Java 8 对比 11

我在lambda与方法引用上运行了一些JMH测试,看起来类似于:IntStream......reduce(Integer::max)vs.IntSream.......reduce((i1,i2)->Integer.max(i1,i2))我注意到,在Java8中,方法引用的执行速度大约是lambda的5倍。当我在Java11中运行测试时,这两种方法的执行时间与Java8中的方法引用差不多快。因此Java11中的lambda和方法引用之间的性能没有重大差异。我的问题是:从Java8到11进行了哪些改进以提高此性能?我正在使用OpenJDK。编辑我的基准:@BenchmarkMode(M

java - 在 Java 中使用 Lambda 进行模棱两可的方法调用

我定义了一个静态的assertThat方法来扩展AssertJ。此方法接受以下类型的lambda表达式:@FunctionalInterfacepublicinterfaceAction{voidexecute()throwsException;}签名看起来像这样:publicstaticExceptionAssertassertThat(Actionaction)我想将此方法与静态导入一起使用。但它是模棱两可的。编译器不知道是否assertThat(Iterable)或者应该使用我的方法。我不明白void方法可能与返回Iterator的方法冲突.知道如何解决这个冲突(不用在asser

Java8 lambda : concat list

这个问题在这里已经有了答案:HowcanIturnaListofListsintoaListinJava8?(12个答案)关闭4年前。我正在尝试连接流列表并对其进行处理。classA{publicListbList;}ListaList;aList.stream().map(a->a.bList)....这里我得到了几个b的列表。但是,我想将我所有的b都收集在一个列表中。有什么想法吗?

java - 无法反序列化 lambda

作为一个小项目,我一直在尝试做一个小东西来读取序列化的lambdas(本地或从FTP)并调用它们的运行函数作为测试的一部分来试验Windows中的文件关联(即打开某些文件类型使用特定程序打开它们)等等,但无论我尝试什么,它似乎都无法正确反序列化。lambda是这样声明的Runnabler=(Runnable&Serializable)()->{//blahblah//madesurenottocaptureanything};并使用由ObjectOutputStream包裹的[noptional]BufferedOutputStream包裹的FileOutputStream进行序列化,

java - 供供应商生成 IntStream 的 Lambda 表达式

如何用lambda表达式替换此处的Supplier代码IntStreaminStream=Stream.generate(newSupplier(){intx=1;@OverridepublicIntegerget(){returnx++;}}).limit(10).mapToInt(t->t.intValue());inStream.forEach(System.out::println);上面这段代码的输出是:12345678910 最佳答案 Stream::generate不适合这个问题。根据文档:Thisissuitable

java - 为什么 java lambda 表达式不引入新级别的作用域?

据我所知,在Haskell等语言中,作为lambda演算的一部分,每个lambda表达式都有自己的范围,所以如果我有嵌套的lambda表达式,例如:\x->(\x->x)则第一个\x参数与第二个\x不同。在Java中,如果你这样做,你会得到一个编译错误,就像你再次使用x作为参数名称或lambda中的局部变量名称,如果它已经在封闭的内部使用的话范围,例如作为方法参数。有谁知道为什么Java以这种方式实现lambda表达式——为什么不让它们引入一个新级别的作用域并像匿名类那样表现?我假设这是因为某些限制或优化,或者可能是因为lambda必须被侵入到现有语言中?

java - 在 Java 8 中使用流、lambda

我想优化以下代码以获取现有的ArrayList并根据以下逻辑创建一个新列表。Java8中的流式处理/lambda是否使其成为可能?for(ShipmentTracingDTOtracing:tracings){if(tracing.getDestination()){newTracings.add(tracing);break;}newTracings.add(tracing);} 最佳答案 您可以使用IntStream.range来完成和List.subList可能是:ListnewTracings=tracings.subLis

java - 创建 lambda 表达式的字符串表示形式

这个问题在这里已经有了答案:Isitpossibletoretrievelambdaexpressionatruntime(2个答案)关闭8年前。出于调试目的,我正在尝试在Java8中创建lambda表达式的字符串表示形式(特别是Predicate,尽管它对其他lambda表达式也很有趣)。我的想法类似于这个:publicclassWhatever{privatestaticStringpredicateToString(Predicatepredicate){Stringrepresentation=...//domagicreturnrepresentation;}publicst

java - JSP 文件中的 Lambda 表达式无法编译

我已经尝试了stackoverflow上提到的大部分建议,但还没有找到解决方案。我遇到的错误如下。Anerroroccurredatline:379inthejspfile:/application-new-project_process.jspLambdaexpressionsareallowedonlyatsourcelevel1.8orabove我正在使用IntelliJIDEA2016.2并应用了这些设置。ProjectStructure→Project,ProjectSDKto1.8(javaversion"1.8.0_102")项目结构→项目,项目语言级别到8.0-Lamb

java - 在数组映射期间将 lambda 替换为 flatMap 中的方法引用

假设我们有一个Customer类:publicclassCustomer{privateCar[]cars;//getter,setter,constructor}以及我们需要在汽车上映射的客户集合。目前我正在这样做:Collectioncustomers=...customers.stream().flatMap(customer->Arrays.stream(customer.getCars()))...它运行良好,但代码看起来不优雅。我真的很想用使用通常看起来更具可读性和更紧凑的方法引用的代码替换它。但是使用数组类型的字段就很难了。问题有什么方法可以增强flatMap调用,使其更