考虑这个例子:我有一个RangeSet列表,其中包含例如时间戳.我想使用java8流而不是命令式方式获取范围的总持续时间:
// "list" is List<RangeSet<Long>>
long totalTime = list.stream()
.expand(rangeset -> rangeset.asRanges())
.map(range -> range.upperEndpoint() - range.lowerEndpoint())
.reduce(0, (total, time) -> total + time);
Run Code Online (Sandbox Code Playgroud)
"扩展"当然不存在; 我们的想法是将流中的每个单个对象转换为其他对象的列表,并将该列表添加到结果流中.
是否有类似的东西或其他方式流利地做到这一点?
我试图将一个监听器变成一个Future,用于异步连接.我不习惯使用java期货,我有一些javascript承诺的经验,但我没有看到如何在java中编写它(我在Java 8中看到"CompletableFuture"可以解决我的问题,不幸的是我是坚持使用java 7).这是我到目前为止所做的:
public Future<Boolean> checkEmailClientConfiguration(final EmailClientConfiguration config) {
final Future<Boolean> future = ???;
// In some other languages I would create a deferred
Transport transport = null;
try {
transport = session.getTransport("smtp");
transport.addConnectionListener(new ConnectionListener() {
@Override
public void opened(ConnectionEvent connectionEvent) {
System.out.println("!!!opened!!! ; connected=" + ((SMTPTransport) connectionEvent.getSource()).isConnected());
// HERE I would like to make my future "resolved"
}
@Override
public void disconnected(ConnectionEvent connectionEvent) {
}
@Override
public void closed(ConnectionEvent connectionEvent) {
}
});
transport.connect(config.getMailSMTPHost(),
config.getMailSMTPPort(),
config.getMailUsername(),
config.getMailPassword());
return future; …Run Code Online (Sandbox Code Playgroud) 我试图在docker 1.9中使用compose运行docker网络.我知道这在1.9中仍然是实验性的,但我想知道我的用例是否可行.
基本上和简化,我有两个服务器,每个服务器都在一个容器中.我们称他们为S1和S2.S1全局暴露,必须可从S2访问.我想通过docker-compose运行S2并使用--x-networking标志(我之所以想要的是S2实际上比这里假设的更复杂,有几个容器,我希望它们运行在一个子网络).S1可以在有或没有撰写的情况下运行.
我从docker网络中了解到,任何容器都可以从同一网络到达其他容器,或者可以通过主机端口映射到达"全局"暴露的任何容器,对吧?
所以我的方案是:
Run Code Online (Sandbox Code Playgroud)S2: build: . ports: - "8080:80"
结果:
我希望能够在172.17.0.1下达到它,因为S1使用了docker0,据我所知.
此外,如果我在没有编写的情况下启动S2但是使用"docker run"手动启动,那么我可以使用172.17.0.1访问S1
那么为什么它不能用于撰写?由于网络功能仍处于试验阶段,这是一个限制吗?
我在"main.ts"中有一个打字稿外部模块,它只导出一个以这种方式编写的函数:
// ...
import O = require('./Options');
"use strict";
function listenRestRoutes(expressApp: any, options?: O.IOptions) {
// ...
}
module.exports = listenRestRoutes;
Run Code Online (Sandbox Code Playgroud)
这个汇编得很好.我有另一个文件,导入此模块:
// ...
import express = require('express');
import mipod = require('./main');
import O = require('./Options');
// ...
var app = express();
var opts: O.IOptions = O.Options.default();
// ...
mipod(app, opts);
Run Code Online (Sandbox Code Playgroud)
最后一行不编译,说错误TS2088:无法调用类型缺少调用签名的表达式.mipod(app,opts);
我不明白为什么我会收到这个错误.尽管有这个错误,javascript正确生成并运行良好.那么,它是一个编译器错误,还是我的代码中有一些错误?
PS:我还尝试在第二个文件的顶部添加引用:
/// <reference path="./main.ts" />
Run Code Online (Sandbox Code Playgroud)
但它没有改变任何东西.