我正在尝试使用flatMap
Optional
Java.这是一个简化的例子:
List<String> x = Arrays.asList("a", "b", "c");
List<String> result = x.stream().flatMap((val) -> val.equals("b") ? Optional.empty() : Optional.of(val)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我从编译器收到此错误消息:
Error:(10, 27) java: incompatible types: no instance(s) of type variable(s) T exist so that java.util.Optional<T> conforms to java.util.stream.Stream<? extends R>
Run Code Online (Sandbox Code Playgroud)
怎么了?以下是我在Scala中尝试实现的示例:
List("a", "b", "c").flatMap(x => if (x == "b") None else Some(x))
Run Code Online (Sandbox Code Playgroud)
它返回:
res2: List[String] = List(a, c)
Run Code Online (Sandbox Code Playgroud)
正如所料.
如何将其转换为Java以便编译?
我有一个第三方组件,它试图在某种情况下向太多单独的地址发送太多UDP消息.这是在软件启动并且情况是暂时的时发生的突发.我实际上不确定这些消息的数量是多少还是每个消息都转到一个单独的IP地址.
无论如何,更改底层协议或有问题的组件不是一个选项,所以我正在寻找一种解决方法.StackTrace看起来像这样:
java.io.IOException: No buffer space available
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
Run Code Online (Sandbox Code Playgroud)
此问题(至少)发生在Java版本1.6.0_13和1.6.0_10以及Linux版本Ubuntu 9.04和RHEL 4.6上.
是否有任何Java系统属性或Linux配置调整可能有所帮助?
我正在Cordova/PhoneGap中编写一个应用程序,它试图使用Dropbox.js从Dropbox获取文件.Cordova版本为3.0.1,Dropbox.js版本为0.10.0.我的Javascript在桌面浏览器上工作得很好:
var client = new Dropbox.Client({ key: "<my key>", secret: "<my secret>"} );
client.authenticate(function(error, client) {
...
Run Code Online (Sandbox Code Playgroud)
但在Cordova打包的应用程序中,我收到一个错误:"您使用的应用程序似乎提交了一个错误的请求".
我怀疑这个问题与在Cordova应用程序中解决此问题的redirect-url有关:
Dropbox.AuthDriver.BrowserBase.currentLocation()
-> file:///android_asset/www/index.html
Run Code Online (Sandbox Code Playgroud)
即使我将其添加到Dropbox API控制台中的OAuth重定向URI,使用文件:///开头的网址也无法正常使用Dropbox API.
如果我之前知道uid和令牌,Cordova应用程序可以正常工作:
var client = new Dropbox.Client({
key: "<my key",
secret: "<my secret>",
token: "<token>",
uid: "<uid>"
});
client.authenticate(function(error, client) {
...
Run Code Online (Sandbox Code Playgroud)
这样我就能很好地阅读我的Dropbox文件.问题是令牌不会永远存在,我想从我的应用程序本身获取一个新令牌.
根据此讨论,此问题应该已在早期版本的dropbox.js(0.9.2)中得到解决.但我仍然遇到它.我想知道我是否应该使用API有点不同,但我不知道如何.
Dropbox.js 在此提交中添加了一个redirectUrl选项我只是不知道我应该在Cordova应用程序中放置什么.file:///android_asset/www/index.html不起作用,因为Dropbox API不允许文件网址.
西蒙麦克唐纳对这个问题的回答可能会有所帮助.但这意味着我必须拥有一个带有dropbox.js登录功能的外部服务器托管页面.或者我可以使用主Dropbox Web登录页面吗?
我正在尝试使用 sbt-native-packager 中的 JavaAppPackaging。我的理解是,当我跑步时:
sbt stage
我应该获得一个包含一些启动脚本的目录 target/universal/stage/bin 。现在我只得到包含我的 jar 及其依赖项的 lib。
这是我的 build.sbt 的相关部分:
val scalatra = "org.scalatra" %% "scalatra" % "2.3.1"
enablePlugins(JavaAppPackaging)
lazy val root = (project in file(".")).
settings(
name := "myapp",
version := "0.2",
scalaVersion := "2.11.6",
libraryDependencies += scalatra
)
Run Code Online (Sandbox Code Playgroud)
另外,我的plugins.sbt有这个:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0")
Run Code Online (Sandbox Code Playgroud)
我正在使用 sbt 0.13.8。
那么为什么我得不到启动脚本,我错过了什么?
我是一个Java开发人员,玩弄Ruby并喜欢它.我已经明白,由于Ruby的元编程功能,我的单元测试变得更加清晰,我不需要讨厌的模拟框架.我有一个类需要File
该类的服务,在我的测试中我不想触及我的真实文件系统.在Java中,我会使用一些虚拟文件系统来更容易地"接缝"传递虚假对象,但在Ruby中显然有点过分.与Java世界相比,我的出现似乎已经非常好了.在我的测试类中,我有一个可选的构造函数参数:
def initialize(file_class=File)
Run Code Online (Sandbox Code Playgroud)
当我需要在课堂上打开文件时,我可以这样做:
@file_class.open(filename)
Run Code Online (Sandbox Code Playgroud)
并且调用转到真正的File类,或者在我的单元测试的情况下,它转到一个不接触文件系统的假类.我知道元编程必须有更好的方法吗?
我有遗留代码库的问题.我想开始用1.6类格式编译它,但有一个问题只有在我尝试运行编译代码时才会显示出来.我得到以下异常:
java.lang.ClassFormatError:类FooBar 0x209中的非法类修饰符
谷歌搜索这并没有透露很多细节.据此,该问题可能与接口和实现修饰符之间的不匹配有关.当然,它必须是一些新的限制,而不是1.5.
问题是类很大,并且有很多内部类和内部内部类,所以问题很难追查(这是我确定的内部类之一).毋庸置疑,该课程没有任何测试,因此改变它需要极其谨慎并且很费力.
那么,有没有人有关于0x209的任何确切信息 - 代码具体是什么意思?
编辑:
感谢Arne让我们朝着正确的方向前进,我们能够追踪问题并制定解决方法.根本原因尚不清楚,但现在我们可以避免它.
我们在某些领域使用Doug Lea的古老util.concurrent包,因为有些组件在只提供Java 1.1的环境中运行(是的,笑,我不介意).
这个相同的代码(使用并发工具)也被用作另一个相关软件的一个小组件.由于Doug的代码使用了1.2的一些特性,我们还被迫修改util.concurrent的某些部分,使其与Sun的1.1反向移植集合包兼容(无法找到那些链接).不知何故,它导致了这种特殊的Eclipse编译行为,当我们将类格式更改为Java 1.6时会发生这种行为.这是导致问题的最小代码:
EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap;
import com.sun.java.util.collections.Map;
public class FooBar
{
public static void main(String[] args) {
Map.Entry e = (Map.Entry)(new ConcurrentHashMap().entrySet().iterator().next());
}
}
Run Code Online (Sandbox Code Playgroud)
用Eclipse编译它(编译设置为1.6,1.5工作正常)并尝试从Sun的1.6 JRE加载类时出现问题.解决方法:我们循环访问键并使用键获取循环内部的值,而不是循环访问条目.
我们在这里的设置非常具有异国情调,难怪其他人都没有碰到这个.我终于检查了我们的构建脚本,并且看,ant-script有1.6个源和目标设置.显然这是特定于Eclipse的.
EDIT2:
我看得更接近我在这里链接的Sun bug报告.那里的问题也与com.sun.java.util.collections.Map.Entry有关.这与Sun的Javac有关.有趣.
我为一个使用Subversion作为主要VCS的团队工作,但几乎每个人都开始通过git-svn在本地使用git.现在我们正在考虑完全转换为git.
作为一个中间步骤,最好同时使用它们两个.问题不在于那些非常乐意切换到git的用户,而是我们围绕Subversion构建的持续集成/构建基础架构.管理当然不会对任何大爆炸导致的停机时间感到激动,我们每两周发布一次新功能,几乎每天都会发布错误修复和其他小问题.理想情况下并行运行这些系统会使最终的开关成为无问题.
问题似乎是不存在源自Subversion存储库的共享git存储库.每个并行git svn merge/rebase都会创建新的git提交,这些提交都是重复的.并行我指的是两个开发人员在他们自己的同一个git存储库的克隆中进行合并或重组.更糟糕的是,git svn dcommits似乎改变了git commit的ID.
那么这种环境是否可能,或者git-svn真的只是一个单用户工具?
有没有人体验过适合Windows Mobile 6的J2SE(最好至少是Java JDK 1.5级)Java虚拟机?如果你知道任何CLDC虚拟机,我也很感兴趣,因为即使这比我们目前的平台更好.