Tag: java 8

在单个流上组合allMatch,noneMatch和anyMatch

我想有以下逻辑:(我知道它不起作用,因为它不止一次地消耗流)。 但我不知道如何实现它。 Stream buffers = super.getBuffers().stream(); if (buffers.allMatch(b -> b.position() > 0)) { return OutgoingMessageStatus.FULLY_SENT; } else if (buffers.noneMatch(b -> b.position() > 0)) { return OutgoingMessageStatus.WAS_NOT_SENT; } else { return OutgoingMessageStatus.PARTIALLY_SENT; } 我怎样才能做到这一点?

JSE 1.8,Sandbox Java Applet通过HTTPS加载,但是使用HTTP检索了crossdomain.xml

大家好,所有的Java / Applet专家, 我偶然发现了最新JDK版本(1.8.0_b26)的一个有趣问题。 当使用最新的JDK运行Sandbox Java Applet时,我们尝试使用不同的协议连接回服务器 – 而不是原始的HTTPS我们使用WSS(安全的Websockets连接,我们使用第三方Websockets客户端Java库)。 结果,JVM尝试从服务器检索crossdomain.xml文件。 问题是,使用HTTP(而不是HTTPS)协议检索文件。 例如,在我们的例子中,服务器IP是192.168.1.1,applet是通过HTTPS默认端口(443)加载的。 在Java控制台中使用跟踪级别5,我们看到从http://192.168.1.1:443检索了crossdomain.xml 。 当然它不起作用,因为服务器只侦听端口443(而不是HTTP)上的HTTPS连接。 另一方面,当我们使用HTTP协议并向服务器打开新的WS(不安全的Websockets连接)时,问题不会出现,因为从http://192.168.1.1:80检索到crossdomain.xml并且它完全是正确。 随着问题的进一步调查,我们进行了更多的观察: 可以使用jnlp.altCrossDomainXMLFiles Java VM参数提供crossdomain.xml文件的替代位置。 我们永远不会成功使这个参数适用于我们(在java_arguments列表和单独的applet参数中都尝试过)。 可能的原因可能是该参数应仅用于Webstart应用程序(尽管它不是专门针对规范编写的)。 建立Websockets连接时,连接堆栈跟踪如下: at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:790)at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)at sun.net.www.http.HttpClient.parseHTTPHeader (HttpClient.java:787)at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647)at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534)at sun。 net.www.protocol.http.HttpURLConnection.access $ 200(HttpURLConnection.java:90)at sun.net.www.protocol.http.HttpURLConnection $ 9.run(HttpURLConnection.java:1431)at sun.net.www.protocol。 http.HttpURLConnection $ 9.run(HttpURLConnection.java:1429)at java.security.AccessController.doPrivileged(Native Method)at java.security.AccessController.doPrivileged(AccessController.java:713)at sun.net.www.protocol.http .httpURLConnection.getInputStream(HttpURLConnection.java:1428)位于com.sun.deploy.net.CrossDomainXML.check(未知来源)的com.sun.deploy.net.CrossDomainXML.check(未知来源)sun.plugin2.applet。 SecurityManagerHelper.checkConne 来自sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:624)的sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(未知来源)的ctHelper(未知来源) 因此,我们查看了CrossDomainXML.java类的最新公开源代码(尽管从2010年开始)。 从代码中可以看出,无论原始浏览器连接是什么,从服务器检索crossdomain.xml文件时始终使用http连接。 所以问题是: 可能是JDK错误还是对crossdomain.xml严格使用HTTP是设计的? 是否在jnlp.altCrossDomainXMLFiles applet中支持jnlp.altCrossDomainXMLFiles JVM参数? […]

映射到List

我正在尝试使用lambdas将Map转换为List 。 基本上我想将键和值连接起来,并在它们之间加上’=’ 。 这似乎微不足道,但我找不到如何做到这一点。 例如 Map map = new HashMap(); map.put(“a1″,”b1”); map.put(“a2″,”b2”); map.put(“a3″,”b3”); // Lambda // Result contains [“a1=b1”, “a2=b2”, “a3=b3”] List result;

Lambda和cast交叉类型(Eclipse编译器bug)

那么,为什么这段代码会编译? public static void main(String[] args) { Calculator test = (Calculator & Sumator) (a, b) -> a + b; System.out.println(test.calculate(2, 3)); Sumator sumator = (Calculator & Sumator) (a, b) -> a + b; // does compile, but throws an Exception sumator.test(); Both both = (Both) (a, b) -> a + b; // does not compile […]

Spring在@RequestBody中反序列化一个LocalDate与@RequestParam中的一个不同 – 为什么,它们可以相同吗?

问题:Spring似乎对LocalDate使用不同的反序列化方法,具体取决于它是出现在@RequestBody还是请求@ReqestParam – 这是否正确,如果是这样,有没有办法在整个应用程序中将它们配置为相同? 背景:在我的@RestController ,我有两个方法 – 一个GET和一个POST。 GET需要一个LocalDate类型的请求参数(“date”); POST需要一个JSON对象,其中一个键(“date”)的类型为LocalDate 。 他们的签名类似于以下内容: @RequestMapping(value = “/entity”, method = RequestMethod.GET) public EntityResponse get( Principal principal, @RequestParam(name = “date”, required = false) LocalDate date) @RequestMapping(value = “/entity”, method = RequestMethod.POST) public EntityResponse post( Principal principal, @RequestBody EntityPost entityPost) public class EntityPost { public LocalDate date; } 我已经按如下方式配置了我的ObjectMapper: @Bean public […]

嵌套BiFunction的深度(或限制,如果有的话)是多少

我一直在玩BiFunction ( java.util.function )。 我举了一些例子,我有一个问题。 是否可以使用BiFunction嵌套操作的次数有限制? 是否像想要的那样多次嵌套假设的add(a, b)方法一样简单? 例如三个嵌套的theFunction.apply() public static int methodContainingMethod (int a, int b, int c, BiFunction theFunction) { return theFunction.apply(theFunction.apply(theFunction.apply(a,b),c),c),c); } 四个嵌套theFunction.apply() return theFunction.apply(theFunction.apply(theFunction.apply(theFunction.apply(a,b),c),c),c),c); 嵌套的数量可以继续,我测试嵌套function超过十次。 我没有确切要求需要多少嵌套……但我很好奇这样可以做多少嵌套?

Java 8 Collection和stream / forEach

在使用Collection时,有没有理由在forEach调用之前专门插入流/并行流? 例: Collection foo; foo.forEach(); // Goes through every item in foo foo.stream().forEach(); // Does stream make a difference here foo.parallelStream().forEach(); // Does this make a difference here? 谢谢

Java 8 javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份validation,但不是Java 7

将应用程序从Java 7切换到Java 8时出现问题。更改JDK后,我开始收到此SSLPeerUnverifiedexception。 改回Java7,也不例外。 我发现了这个问题: Java 7的SSL连接失败,这意味着这可能与服务器端问题有关。 我们的服务器确实在Ubuntu机器上运行,但它也在运行Java8(sun Java8) 不确定发布还有什么其他内容。 如果需要/有用,我可以提供代码示例。 我现在没有把它们包括在内,因为好像代码不是问题。 编辑 – 链接到我的SSLSocketFactory扩展: http : //pastebin.com/2j6HDHE7 Edit2 – Http客户端代码: private HttpClient getHttpClient() throws GeneralSecurityException, IOException { final KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(CommandChannel.class.getResourceAsStream(“myKeystore”), “myPassword”.toCharArray()); final SSLSocketFactory sslSocketFactory = new TrustingSSLSocketFactory(trustStore); final SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme(“http”, 80, PlainSocketFactory.getSocketFactory())); registry.register(new Scheme(“https”, 443, sslSocketFactory)); […]

如何使用lambda获取哈希映射中值的键数

我有一个哈希映射 Map<Integer, List> Directmap = new HashMap<Integer, List>() {{ put(0, Arrays.asList(a, b)); put(1, Arrays.asList(b, c)); put(2, Arrays.asList(d)); put(3, Arrays.asList(d, e)); put(4, Arrays.asList(e)); put(5, Arrays.asList()); }}; Directmap: {0=[a, b], 1=[b, c], 2=[d], 3=[d, e], 4=[e], 5=[]} 我想计算每个值的键数。 例如: “a”有一个键, “b”有两个键,……, “e”有两个键,即3和4。 我试过这样的事情: Map ex = Directmap.entrySet().stream() .collect(Collectors.groupingBy(e -> e.getKey(), Collectors.counting())); 我想要以键数作为输出的值。 喜欢这个 : a=[1], b=[2], c=[1], […]

Java 8中basic和url base64编码之间的区别

Java 8 Base64库有两个可用于构建URI的变体:“Basic”和“URL和文件名安全”。 文档指向RFC 4648表2作为差异的解释。 在阅读规范之后,我仍然不清楚两种编码之间的实际区别是什么:两种标准都得到“广泛”支持? 具体的浏览器呢? 是否建议对数据URI编码使用URL和文件名安全编码? 是否存在已知的支持限制?