草庐IT

lambda表达式

全部标签

java - Apache Spark Lambda 表达式 - 序列化问题

我尝试在spark任务中使用lambda表达式,它抛出“java.lang.IllegalArgumentException:无效的lambda反序列化”异常。当代码类似于"transform(pRDD->pRDD.map(t->t._2))"时会抛出此异常。代码片段如下。JavaPairDStreamaggregate=pairRDD.reduceByKey((x,y)->x+y);JavaDStreamcon=aggregate.transform((Function,JavaRDD>)pRDD->pRDD.map((Function,Integer>)t->t._2));Java

java - 无法使用通用 lambda 解析重载方法

这段代码:publicstaticvoidf(String[]args){}publicstaticvoidf(Integer[]args){}publicstaticvoidmain(String[]args){f(Stream.of("xxx").toArray(i->newString[i]));}使用jdk8u45编译成功但jdk8u60打印以下错误:Error:(17,9)java:referencetofisambiguousbothmethodf(java.lang.String[])intype_infer.Testandmethodf(java.lang.Intege

java - 为什么 lambda 类型推断失败,但等效方法引用成功?

我正在使用lambda在下面的Java程序中实现功能接口(interface)。当lambda作为参数传递给泛型方法时,编译器会标记“不兼容类型”错误,因为它推断lambda实现了Func接口(interface),该接口(interface)让编译器将lambda参数(“thing”)解释为当lambda尝试将其传递给需要Round类型参数的方法(testRound)时,它属于Shape类型。这个错误对我来说很有意义。但等效方法引用不会引发错误消息。我一直误以为lambda和可以替换该lambda的方法引用是可以互换的。在这里,事实并非如此。publicclassMain{publi

java - 使用泛型和 lambda 重载方法时调用方法不明确

我注意到使用泛型和lambda重载方法时有一种奇怪的行为。这个类工作正常:publicvoidtest(Tt){}publicvoidtest(Suppliert){}publicvoidtest(){test("test");test(()->"test");}没有模棱两可的方法调用。但是,将其更改为此会使第二个调用不明确:publicvoidtest(Classc,Tt){}publicvoidtest(Classc,Suppliert){}publicvoidtest(){test(String.class,"test");test(String.class,()->"test"

java - 表示为字符串的二维矩阵上的正则表达式

我正在尝试在表示为字符串的二维矩阵中搜索模式。图片如下://horizontallineStringpat1="............."+"............."+"............."+"....XXXX....."+"............."+".............";//verticallineStringpat2="............."+"......X......"+"......X......"+"......X......"+"......X......"+".............";搜索第一个模式很简单,正则表达式类似于:X+在第

java - 无法使用表达式递增字节值但使用递增运算符

这个问题在这里已经有了答案:whybyte+=1compilebutbyte=byte+1not?(8个答案)关闭9年前。为什么以下是有效的bytei=0;i++;以下是无效的bytei=0;i=i+1;会是什么原因呢?我知道在i+1的情况下,整个值显式增加1(这将是int值)所以会出现编译问题,但万一i++它做同样的事情但没有得到任何错误。

java - 以简单英语列出的项目的正则表达式

这是一个人为的例子,但我试图在这里找到一个一般原则。给定使用这种类似列表的形式用英语书写的短语:IhaveacatIhaveacatandadogIhaveacat,adog,andaguineapigIhaveacat,adog,aguineapig,andasnake我能否使用正则表达式获取所有项目,而不管项目有多少?请注意,这些项目可能包含多个词。显然,如果我只有一个,那么我可以使用Ihavea(.+),如果正好有两个,Ihavea(.+)anda(.+)有效。但如果我想匹配的不仅仅是一个示例,事情就会变得更加复杂。如果我想从前两个示例中提取列表项,我认为这会起作用:Ihavea

java - Lambda 表达式可以访问其范围之外的类的私有(private)方法吗?

我想获得对java.lang.String包私有(private)构造函数的反射访问。即,这个:/**Packageprivateconstructorwhichsharesvaluearrayforspeed.*thisconstructorisalwaysexpectedtobecalledwithshare==true.*aseparateconstructorisneededbecausewealreadyhaveapublic*String(char[])constructorthatmakesacopyofthegivenchar[].*/String(char[]valu

Java 8 - 在 lambda 中抛出多个通用检查异常

在我正在从事的一个项目中,我发现了一个类,该类将其父类(superclass)的所有方法包装在一些精心设计的异常处理中。它看起来类似于:publicvoidmethod1()throwsExceptionA{StringexceptionString="";try{super.method1();}catch(ExceptionAe){exceptionString=//throwe;}finally{//}}publicvoidmethod2()throwsExceptionB,ExceptionC{StringexceptionString="";try{super.method2

java - 更好的正则表达式语法想法

我需要一些帮助来完成我对正则表达式的想法。介绍有一个questionaboutbettersyntax对于SE上的正则表达式,但我认为我不会使用流畅的语法。这对新手来说肯定很好,但在复杂的正则表达式的情况下,你用一整页稍微好一点的胡言乱语替换一行胡言乱语。我喜欢approachbyMartinFowler,其中正则表达式由较小的部分组成。他的解决方案是可读的,但是是手工制作的;他提出了一种聪明的方法来构建一个复杂的正则表达式,而不是一个支持它的类。我正在尝试使用类似的方法(首先参见他的示例)使其成为一个类finalMyPatternpattern=MyPattern.builder()