小编Joe*_*oel的帖子

有没有办法使用流API将对象列表"扩展"为更大的列表?

考虑这个例子:我有一个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)

"扩展"当然不存在; 我们的想法是将流中的每个单个对象转换为其他对象的列表,并将该列表添加到结果流中.

是否有类似的东西或其他方式流利地做到这一点?

java java-8

7
推荐指数
1
解决办法
3630
查看次数

在java中将听众转变为未来

我试图将一个监听器变成一个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)

java future

6
推荐指数
1
解决办法
837
查看次数

单个主机上的Docker网络与compose

我试图在docker 1.9中使用compose运行docker网络.我知道这在1.9中仍然是实验性的,但我想知道我的用例是否可行.

基本上和简化,我有两个服务器,每个服务器都在一个容器中.我们称他们为S1和S2.S1全局暴露,必须可从S2访问.我想通过docker-compose运行S2并使用--x-networking标志(我之所以想要的是S2实际上比这里假设的更复杂,有几个容器,我希望它们运行在一个子网络).S1可以在有或没有撰写的情况下运行.

我从docker网络中了解到,任何容器都可以从同一网络到达其他容器,或者可以通过主机端口映射到达"全局"暴露的任何容器,对吧?

所以我的方案是:

  • 我用端口映射手动启动S1,例如"-p 7210:7202"(7202在dockerfile中公开)
  • S2是从一个简单的撰写文件创建的,并带有标志--x-networking对于我的测试用例,我刚创建了一个非常简约的撰写文件,例如:
S2:
    build: .
    ports:
        - "8080:80"
Run Code Online (Sandbox Code Playgroud)

结果:

  • S2在"localhost"下无法从S2中看到(这是非常期待的)
  • 在"172.17.0.1"(=接口docker0)下从S2看不到S1

我希望能够在172.17.0.1下达到它,因为S1使用了docker0,据我所知.

此外,如果我在没有编写的情况下启动S2但是使用"docker run"手动启动,那么我可以使用172.17.0.1访问S1

那么为什么它不能用于撰写?由于网络功能仍处于试验阶段,这是一个限制吗?

docker docker-compose

4
推荐指数
1
解决办法
7731
查看次数

导出打字稿功能"缺少呼号"

我在"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)

但它没有改变任何东西.

typescript

3
推荐指数
1
解决办法
4761
查看次数

标签 统计

java ×2

docker ×1

docker-compose ×1

future ×1

java-8 ×1

typescript ×1