Questions tagged «java-8»

对于2014年3月18日发行的Java平台的第8版(内部版本1.8)特定于Java 8的问题,请使用此标记。在大多数情况下,您还应该指定java标记。

9
Java 8:使用换行符和缩进格式格式化lambda
我想通过lambda缩进实现以下内容: 多行语句: String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" }; List<String> strings = Arrays.stream(ppl) .filter( (x) -> { return x.contains("(M)"); } ).collect(Collectors.toList()); strings.stream().forEach(System.out::println); 单行语句: List<String> strings = Arrays.stream(ppl) .map((x) -> x.toUpperCase()) .filter((x) -> x.contains("(M)")) .collect(Collectors.toList()); 当前,Eclipse将自动格式化为以下格式: 多行语句: String[] ppl …

6
forEach循环Java 8 for Map条目集
我正在尝试将每个循环的旧常规转换到映射条目集的每个循环的java7到java8,但是我遇到了错误。这是我要转换的代码: for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } 这是我所做的更改: map.forEach( Map.Entry<String, String> entry -> { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); }); 我也尝试这样做: Map.Entry<String, String> entry; map.forEach(entry -> { System.out.println("Key : …
82 java  lambda  java-8 

9
JDK8-尝试使用Maven Javadoc插件生成Javadoc时发生错误“找不到javax.interceptor.InterceptorBinding的类文件”
我正在使用JDK8(在由Jenkins启动的Linux上,使用Win x64 u25 JDK +在我的Eclipse工作区中尝试过-jdk-8u20-linux-x64,这两个问题都相同)。 我有一个多模块Maven项目(我从包装类型为“ pom”的主模块中启动Maven目标“ javadoc:aggregate”)。 Pom构建部分如下所示: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </plugin> </plugins> </build> 我总是收到错误: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.1:aggregate (default-cli) on project uloan-global-build: An error has occurred in JavaDocs report generation: [ERROR] Exit code: …

10
org.apache.tomcat.util.bcel.classfile.ClassFormatException:常量池中的无效字节标记:15
我正在将Web应用程序从Tomcat 7移植到具有Tomcat 7但具有Java 8的另一台服务器。 Tomcat成功启动,但是在日志中catalina.out我得到: org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15 at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:131) at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:60) at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209) at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2049) at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1931) at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1899) at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1885) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:346) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) at …

3
方法引用缓存在Java 8中是个好主意吗?
考虑我有如下代码: class Foo { Y func(X x) {...} void doSomethingWithAFunc(Function<X,Y> f){...} void hotFunction(){ doSomethingWithAFunc(this::func); } } 假设hotFunction经常调用。那么建议缓存this::func如下: class Foo { Function<X,Y> f = this::func; ... void hotFunction(){ doSomethingWithAFunc(f); } } 据我对java方法引用的理解,使用方法引用时,虚拟机会创建一个匿名类的对象。因此,缓存引用只会创建一次该对象,而第一种方法是在每个函数调用上创建该对象。它是否正确? 应该缓存出现在代码中热门位置的方法引用,还是VM能够优化它,并使多余的缓存?是否有一般的最佳实践,还是这种高度VM实施特定于这种缓存是否有用?

12
如果不存在,如何在Optional上执行逻辑?
我想使用java8替换以下代码Optional: public Obj getObjectFromDB() { Obj obj = dao.find(); if (obj != null) { obj.setAvailable(true); } else { logger.fatal("Object not available"); } return obj; } 以下伪代码由于没有orElseRun方法而无法使用,但无论如何它说明了我的目的: public Optional<Obj> getObjectFromDB() { Optional<Obj> obj = dao.find(); return obj.ifPresent(obj.setAvailable(true)).orElseRun(logger.fatal("Object not available")); }
81 java  java-8  optional 

5
如何在Java 8和Java 9中使用无符号整数?
在Oracle“原始数据类型”页面中,它提到Java 8添加了对无符号int和long的支持: int:默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2 31,最大值为2 31 -1。在Java SE 8和更高版本中,可以使用int数据类型表示无符号的32位整数,其最小值为0,最大值为2 32 -1。使用Integer该类可将int数据类型用作无符号整数。有关更多信息,请参见“数字类”部分。像静态方法compareUnsigned,divideUnsigned等已被添加到Integer类,以支持算术运算的无符号整数。 long:long数据类型是64位二进制补码整数。带符号long的最小值为-2 63,最大值为2 63 -1。在Java SE 8和更高版本中,可以使用long数据类型表示无符号的64位long,其最小值为0,最大值为2 64 -1。当您需要一个比int提供的值宽的值范围时,请使用此数据类型。该Long班还包含方法,如compareUnsigned,divideUnsigned等支持算术运算的无符号long。 但是,我发现没有办法声明无符号的long或integer。例如,以下代码在应该在范围内时(给出的值恰好是2 64 -1)给出了“文字超出范围”的编译器错误消息(我使用的是Java 8 )。 : public class Foo { static long values = 18446744073709551615L; public static void main(String[] args){ System.out.println(values); } } 那么,有什么方法可以声明一个无符号的int或long?
81 java  java-8  unsigned 



5
Java 7和8中方法的最大大小
我知道Java的方法不能大于64 KB。这种限制导致我们从JavaCC语法生成的代码出现问题。我们在使用Java 6时遇到了问题,并且能够通过更改语法来解决此问题。是否已针对Java 7更改了限制,或者已针对Java 8计划了限制? 为了清楚起见。我不需要一个大于64 KB的方法。但是我写了一个可以编译成很大方法的语法。
80 java  java-7  java-8 

3
Java 8:使用流API合并列表
我有以下情况 Map<Key, ListContainer> map; public class ListContainer{ List<AClass> lst; } 我必须合并所有列表 lst从ListContainer从对象Map地图。 public static void main(String args[]){ List<AClass> alltheObjectsAClass = map.values().stream(). // continue.... } 知道如何使用Java 8流API吗?


3
检查流中的instanceof
我有以下表达: scheduleIntervalContainers.stream() .filter(sic -> ((ScheduleIntervalContainer) sic).getStartTime() != ((ScheduleIntervalContainer)sic).getEndTime()) .collect(Collectors.toList()); ...其中scheduleIntervalContainers元素类型为ScheduleContainer: final List<ScheduleContainer> scheduleIntervalContainers 是否可以在过滤器之前检查类型?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.