Tag: java 8

Comparator.comparing(…)嵌套字段

假设我有一个这样的域模型: class Lecture { Course course; … // getters } class Course { Teacher teacher; int studentSize; … // getters } class Teacher { int age; … // getters } 现在我可以像这样创建一个教师比较器: return Comparator .comparing(Teacher::getAge); 但是如何比较Lecture在嵌套字段上的比例呢? return Comparator .comparing(Lecture::getCourse::getTeacher:getAge) .thenComparing(Lecture::getCourse::getStudentSize); 我无法在模型上添加方法Lecture.getTeacherAge() 。

枚举,接口和(Java 8)lambdas:代码编译但在运行时失败; 这是预期的吗?

JDK是甲骨文的JDK 1.8u65,但问题是“低至”1.8u25。 这是完整的SSCCE: public final class Foo { private interface X { default void x() { } } private enum E1 implements X { INSTANCE, ; } private enum E2 implements X { INSTANCE, ; } public static void main(final String… args) { Stream.of(E1.INSTANCE, E2.INSTANCE).forEach(X::x); } } 这段代码编译; 但它在运行时失败: Exception in thread “main” java.lang.BootstrapMethodError: call […]

Java 8流条件处理

我有兴趣将一个流分成两个或多个子流,并以不同的方式处理这些元素。 例如,(大)文本文件可能包含类型A的行和类型B的行,在这种情况下,我想要执行以下操作: File.lines(path) .filter(line -> isTypeA(line)) .forEachTrue(line -> processTypeA(line)) .forEachFalse(line -> processTypeB(line)) 以前是我尝试抽象的情况。 实际上我有一个非常大的文本文件,其中每一行都是针对正则表达式进行测试的; 如果该行通过,则处理它,而如果它被拒绝,那么我想更新一个计数器。 对拒绝字符串的进一步处理是我不仅仅使用filter 。 有没有合理的方法用流来做这个,还是我必须回退到循环? (我希望这也是并行运行,所以溪流是我的第一选择)。

flatMap是否保证是懒惰的?

请考虑以下代码: urls.stream() .flatMap(url -> fetchDataFromInternet(url).stream()) .filter(…) .findFirst() .get(); 当第一个url足够时, fetchDataFromInternet会为第二个url调用fetchDataFromInternet ? 我尝试了一个较小的例子,它看起来像预期的那样工作。 即逐个处理数据但是可以依赖这种行为吗? 如果没有,在.flatMap(…)之前调用.sequential() .flatMap(…)帮助吗? Stream.of(“one”, “two”, “three”) .flatMap(num -> { System.out.println(“Processing ” + num); // return FetchFromInternetForNum(num).data().stream(); return Stream.of(num); }) .peek(num -> System.out.println(“Peek before filter: “+ num)) .filter(num -> num.length() > 0) .peek(num -> System.out.println(“Peek after filter: “+ num)) .forEach(num -> { System.out.println(“Done ” […]

JAX-RS和java.time.LocalDate作为输入参数

使用JAX-RS和java.time.LocalDate (java8)时出现问题。 我想使用JSON将这样的对象传递给JAX-RS方法: Person { java.time.LocalDate birthDay; } 我得到的例外是: com.fasterxml.jackson.databind.JsonMappingException :找不到类型[simple type,class java.time.LocalDate ]的合适构造函数:无法在[Source: io.undertow.servlet.spec.ServletInputStreamImpl@21cca2c1 ]中实例化JSON对象(需要添加/启用类型信息?) io.undertow.servlet.spec.ServletInputStreamImpl@21cca2c1 ; line:2,column:3] 如何创建某种将json-dates映射到java.time.LocalDate的拦截器? 我已经尝试实现了一个MessageBodyReader ,但是如果LocalDate是另一个类中的一个字段 ,我必须为每个持有LocalDate类编写一个MessageBodyReader (据我所知)。 (Java EE7(仅使用javaee-api,不需要任何第三方依赖),JAX-RS,Java 8,Wildfly 8.2) 有什么建议么?

如何在JSR 310中处理大写或小写?

如果一个月是UPPER或小写,即不是Title情况,则DateTimeFormatter无法解析日期。 有没有一种简单的方法可以将日期转换为标题案例,还是一种使格式化程序更宽松的方法? for (String date : “15-JAN-12, 15-Jan-12, 15-jan-12, 15-01-12”.split(“, “)) { try { System.out.println(date + ” => ” + LocalDate.parse(date, DateTimeFormatter.ofPattern(“yy-MMM-dd”))); } catch (Exception e) { System.out.println(date + ” => ” + e); } } 版画 15-JAN-12 => java.time.format.DateTimeParseException: Text ’15-JAN-12′ could not be parsed at index 3 15-Jan-12 => 2015-01-12 15-01-12 => java.time.format.DateTimeParseException: […]

将Integer 转换为int 数组

是否有一种将Integer数组转换为int数组的奇特方法? (我不想迭代每个元素;我正在寻找一种优雅而快速的方法来编写它) 我正在使用另一种方式 scaleTests.add(Arrays.stream(data).boxed().toArray(Double[]::new)); 我正在寻找单线但无法找到的东西。 目标是: int[] valuesPrimitives = Integer[] valuesWrapper

Java 8 Comparator nullsFirst naturalOrder困惑

这可能是一个简单的问题,但我想清楚地理解它…… 我有这样的代码: public final class Persona { private final int id; private final String name public Persona(final int id,final String name) { this.id = id; this.name = name; } public int getId(){return id;} public String getName(){return name;} @Override public String toString(){return “Persona{” + “id=” + id + “, name=” + name+’}’;} } 我正在测试这段代码: import static […]

使用Java 8的Spring 3.2.x.

我们目前正在使用spring 3.2.9。 我们正在考虑将其升级到更新版本。 当我查看文档时,它说明了这一点 Along with 4.0 M1, we’ve released Spring Framework 3.2.3, containing fixes for recently reported issues but also coming with OpenJDK 8 runtime support. Spring Framework 3.2.x will support deployment on JDK 8 runtimes for applications compiled against JDK 7 (with -target 1.7) or earlier. 这是否意味着我无法在Java 8上编译? 如果我想用Java 8编译,我应该使用Spring 4.0.x版吗?

Java 8:使用静态方法而不是静态util类的接口

当我需要一堆无状态实用程序方法时,Java 8中的最佳实践是什么。 拥有一个不会被任何人实现的接口,即public interface Signatures和public interface Environments ,或者以旧方式做得更好 – 拥有私有构造函数的public final class Signatures和public final class Environments 枚举?