小编Den*_*ial的帖子

了解何时以及如何使用Java 8 Lambdas

我花了一些时间来学习Java 8的一些新功能.作为练习,我使用一些Java 8功能接口编写了一个MergeSort.我在下面包含完整的代码(可能存在错误/优化,如果它们与Java 8功能相关,我只对它们感兴趣).我的问题是,我相信在使用我的功能界面时有机会利用lambda表达式,但它还没有点击我的大脑.感觉就像每次我打电话申请,我应该有一种方法可以使用" - >"代替.有人可以给我看灯吗?

使用BinaryOperator功能接口编写的合并函数

public class Merge implements BinaryOperator<int[]>{

@Override
public int[] apply(int[] t, int[] u) {

    int[] result = new int[t.length + u.length];

    for (int i = 0, j = 0, k = 0; i < result.length; i++){

        if( j == t.length){
            result[i] = u[k++];
        } else if (k == u.length) {
            result[i] = t[j++];
        } else {
            result[i] = t[j] < u [k] ? t[j++] : u[k++];
        }

    }

    return result;
}

}
Run Code Online (Sandbox Code Playgroud)

MergeSort编写为java.util.function.Function

public …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

13
推荐指数
1
解决办法
4313
查看次数

使用时间过去d3中的颜色转换

我一直很难绕过一些D3概念(我对javascript相对较新没有帮助).我想要做的是有一个状态指示器,开始绿色,慢慢变黄,然后慢慢变红.如果发生某些事件(按下按钮,收到消息,等等),我希望指示器返回绿色,重新开始转换.

这是一个简单的例子(在jQuery中),显示了基本的视觉效果(没有重置能力)http://jsfiddle.net/N4APE/

在D3中,我的想法是将背景颜色映射到传递的毫秒数.我尝试创建这样的比例:

//10 sec is yellow, 30 sec is red
d3.scale.linear().domain([0, 10000, 30000]).range(["#00ff00", "#ffff00", "#ff0000"]);
Run Code Online (Sandbox Code Playgroud)

但现在我有点迷失了.我一直在玩转换,补间和插值器的组合,但我似乎没有到达任何地方.这里有一些可悲的尝试让它运作http://jsfiddle.net/Ebuwa/

我的问题:

  • 我不知道如何将过渡的经过毫米与我的比例相关联,然后设置背景颜色
  • 我的转换似乎在我创建它时运行,而不是在我调用它时运行,并且它在错误的元素上运行.
  • 一旦我克服了其他问题,我不肯定如何重置过渡以保持绿色.

另外一个注意事项,我可能很高兴使用svg圈子或类似的东西,但我有运气svg fill属性,因为我有一个html背景属性.

谢谢

javascript d3.js

8
推荐指数
1
解决办法
8689
查看次数

如何使用SWIG包装std :: function对象?

我看过很多类似的问题,但还没有找到解决我特定问题的方法.我试图SWIGify一些使用std :: function的C++ 11代码,所以我可以在我的Java应用程序中使用它.

我遇到过像这样的共享指针:

virtual std::shared_ptr<some::ns::TheThing> getTheThing(unsigned short thingID);
Run Code Online (Sandbox Code Playgroud)

并使用shared_ptr指令成功处理它们,如下所示:

%shared_ptr(some::ns::TheThing);
Run Code Online (Sandbox Code Playgroud)

我遇到过这样的共享指针向量:

virtual std::vector<std::shared_ptr<some::ns::TheThing>> getAllTheThings() const = 0;
Run Code Online (Sandbox Code Playgroud)

并使用如下模板成功处理它们:

%template(ThingVector) std::vector<std::shared_ptr<some::ns::TheThing>>;
Run Code Online (Sandbox Code Playgroud)

现在我有一个像这样的方法:

 void registerThingCallback(std::function<void(std::shared_ptr<some::ns::TheThing>) > func);
Run Code Online (Sandbox Code Playgroud)

我无法让SWIG正确包装它.我已经尝试使用%回调,导演,%模板和%内联功能代码,因为我已经看到所有这些事情的例子,但是还没有能够得到任何似乎接近工作的东西.如果有帮助(清理和减少),这里有一个关于函数调用的更多上下文:

thing_callback.h

#include <functional>

namespace some {
  namespace ns {

    /**
     * Hold some callbacks.
     */
    class ThingCallbacks {
    public:

        /**
         * Registers a callback 
         * @param func The callback function
         */
        void registerThingCallback(std::function<void(std::shared_ptr<some::ns::TheThing>) > func);

    };

  }
}
Run Code Online (Sandbox Code Playgroud)

更新

根据Flexo下面的答案,我更接近解决方案.我能够让下面的例子完全像宣传的那样工作.我尝试将它合并到我的实际代码中,但遇到了问题.为了扩展我之前的简化示例,这里是我对TheThing的定义:

test_thing.h

#ifndef THE_THING_H
#define THE_THING_H

#include <string>

namespace some {
  namespace ns …
Run Code Online (Sandbox Code Playgroud)

c++ java swig c++11 std-function

8
推荐指数
1
解决办法
2229
查看次数

在 Camel 中测试我的对象的正确方法

我正在尝试为骆驼路线设置测试。我的测试路线读取一个二进制文件并将其发送到翻译器 bean,返回一个 POJO。现在,我想对 POJO 进行一些断言,以确保其中的值与已知值匹配。我认为标准的东西。在我见过的示例中,主体似乎始终是 String 或原始类型,并且可以对其进行简单的断言。然而,就我而言,它是一个对象,所以我想以某种方式获取该对象。

到目前为止,这是我尝试过的:

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("file:///path/to/dir/of/test/file/?noop=true")
            .bean(TranslatorBean.class)
            .to("mock:test").end();
        }
    };
}

@Test
public void testReadMessage() throws Exception {

    MockEndpoint endpoint = getMockEndpoint("mock:test");

    endpoint.whenAnyExchangeReceived(new Processor() {      
        @Override
        public void process(Exchange exchange) throws Exception {           
            Object body = exchange.getIn().getBody();

            assertIsInstanceOf(MyPOJO.class, body);

            MyPOJO message = (MyPOJO) body;

            assertEquals("Some Field", someValue, message.getSomeField());

            // etc., etc.

        }           
    });


    //If I don't put some sleep …
Run Code Online (Sandbox Code Playgroud)

java junit apache-camel

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

标签 统计

java ×3

apache-camel ×1

c++ ×1

c++11 ×1

d3.js ×1

java-8 ×1

javascript ×1

junit ×1

lambda ×1

std-function ×1

swig ×1