Tag: java 8

为什么Stream.flatMap不能接受集合?

给出以下作为数据类的例子: class Country { List<Region> regions = new ArrayList<>(); List<Region> getRegions() { return regions; } } class Region { String getName() { return "some name"; } } 假设我会有一个国家名单 List<Country> countries = new ArrayList<>(); 我想把这些流到他们的地区和他们相应的名字,我想做以下事情: countries.stream().flatMap(Country::getRegions).map(Region::getName)… 但是,由于“getRegions”的返回值是Collection(List),而不是由FlatMap方法接受的Stream,所以该代码不能编译。 但是因为我知道任何Collection都可以通过它的Collection.stream()方法进行流式处理,这应该不是问题。 我仍然被迫写下如下: countries.stream().flatMap(c -> c.getRegions().stream()).map(Region::getName)… 哪个(给予更丰富的上下文)比前者更不可读。 问题是,有什么原因,我错过了,因为这是庞大的? 在我的框架中,我有很多的例子,我不得不采取这种方式,总是让我酸酸的味道。 (猜猜我只需要将Kotlin添加到我们的项目中,并使用带有Collection:p或do的flatMap方法来扩展Stream类)

是否有可能使用Java 8进行Android开发?

在网上搜索,目前还不清楚Java 8是否支持Android开发。 在我下载/安装Java 8之前,可以有人指出我的任何“官方”文档说Java 8是或不支持Android开发。

Java 8中的map和flatMap方法有什么区别?

在Java 8中, Stream.map和Stream.flatMap方法有什么区别?

在java8中处理多个Null检查

在下面的情况下,而不是多个空检查,我计划添加一些可读的代码。 可能是在java 8的流/地图的帮助。 有人能帮助我吗? private String getRailsServiceClass(IRailsComponent railsComponent) { String serviceClass = ""; if (railsComponent != null && railsComponent.getRailOffer() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList().get(0).getPassengerSegmentFareList() != null && railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList().get(0).getPassengerSegmentFareList().get(0).getCarrierServiceClassDisplayName() != null) { return railsComponent.getRailOffer().getRailProducts().get(0).getRailProduct().getFareBreakdownList().get(0).getPassengerFareList().get(0).getPassengerSegmentFareList().get(0).getCarrierServiceClassDisplayName(); } return serviceClass; }

错误:Jack需要支持Java 8语言功能。 启用插件或删除sourceCompatibility JavaVersion.VERSION_1_8

正如在developer.android网站中所提到的 如果你的项目依赖于Jack,那么你应该迁移到使用Android Studio默认工具链中内置的Java 8支持。“Jack工具链已经被废弃了。 我需要使用lambda表达式,所以我已经禁用了插口选项,但是当我编译我的代码时,出现以下错误 Error:Jack is required to support Java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8. 以下是我的build.gradle文件的截图

Java将列表转换为集合的映射

假设我有一个名为Student的对象列表。 对象学生是这样定义的 public Class Student { private String studentName; private String courseTaking; } 在学生名单中,可以有多个具有相同studentName但不同courseTaking的学生对象。 现在我想把学生名单变成一个studentName和course的地图像这样 Map<String, Set<String>> 关键是studentName,价值就是把同一个学生的所有课程作为一个整体放在一起。 我怎样才能使用stream()和collect()?

与Java SAM没有2.12 M2标志的Scala互操作

有没有使用Java @FunctionalInterface / SAM / lambda表达式的Java-8 API编写Scala代码的公认技巧? 虽然Java lambda表达式inter-op在M2 http://www.scala-lang.org/news/2.12.0-M2中的一个标志下是可用的,但我更希望类/ AnyVal解决方案可能与scala一起工作功能X特点。 不幸的是,scala.FunctionX扩展AnyRef而不是Any,所以不能使用/混合这些特性到隐式的AnyVal类实现中。 补充:我不完全相信,即使scala.FunctionX是全球特征(从任何延伸)我如何实现我的目标。 我的用例是这样的: 在我的一个项目中,我选择了像Java Stream接口和类一样提供一个带有FunctionalInterfaces的Java-8 API,以便迎合尽可能广泛的基于JVM的客户端语言,例如Closure,Scala和Kotlin。 对于使用我的Java-8 API的每种客户端语言,如果在访问Java-8 API时,我将编写适当的绑定(如果需要的话)以使用特定于语言的习惯用法。 顺便说一句。 我也会对在Kotlin-Java互操作环境中提出的这个问题的任何评论感兴趣。

Kotlin:Java 8的哪些功能尚未支持?

是否有关于Java 8功能的最新概述,这些功能在Kotlin中尚不受支持? 例如,调用像Map#putIfAbsent这样的默认方法无法编译(不支持的引用错误): import java.util.* fun main(args: Array<String>) { val x : Map<Int, Int> = HashMap<Int, Int>() x.putIfAbsent(1, 2) } 如果默认方法被覆盖,它将起作用: import java.util.* fun main(args: Array<String>) { val x : HashMap<Int, Int> = HashMap<Int, Int>() x.putIfAbsent(1, 2) } 这就是我通过实验发现的结果,但是对于决定是否已经可以从Java 8代码迁移到Kotlin,系统性的概述将是有价值的。 更新:我的例子中的代码是由“Java to Kotlin”转换器创建的。 正如user2235698指出的那样, Map<Int, Int>是一个不可变的Kotlin映射。 不过,当我将其更改为java.util.Map映射时,该示例无法编译。 然而,我声称它必须用默认的方法做一些事情,这是误导性的。 由于它超出了这个问题的范围,所以我在这里打开了一个后续问题: java.util.HashMap是否不在Kotlin中实现java.util.Map?

胶囊例外

我试图启动Corda教程应用程序 ,并在我$ sh runnodes后得到这个错误。 之前没有和JDK一起工作,所以要求详细的解释。 bash -c'cd / Users / marieleaf / Dropbox / blockchain / corda / cordapp-tutorial / kotlin-source / build / nodes / Controller; / usr / libexec / java_home -v 1.8 –exec java -Dname = Controller-corda.jar -Dcapsule.jvm.args = -agentlib:jdwp = transport = dt_socket,server = y,suspend = n,address = 5005 -jar corda.jar […]

从Nashorn转换到Rhino(Gradle)

我正在使用Java 8与Kotlin,而我的项目( http://michel-kraemer.github.io/citeproc-java/ )中的一个库拒绝在与Java 8捆绑在一起的Nashorn JavaScript解释器上运行。解决方案是改为使用Rhino JavaScript解释器。 我正在使用Gradle构建我的项目。 我已经把Rhino加入到了我的依赖中,但是图书馆仍然坚持使用Nashorn。 compile 'org.mozilla:rhino:1.7.7.1' 此外,下面的代码产生一个NullPointerException: val m = ScriptEngineManager() // specifically look for "rhino" engine val engine = m.getEngineByName("rhino") 所以看起来Rhino不在任何地方。 我如何确保Rhino可用于我的应用程序?