小编Mat*_*mer的帖子

在不收集Java8流的情况下对其进行分组

Java 8中是否有任何方法可以将元素分组java.util.stream.Stream而不收集它们?我希望结果Stream再次出现.因为我必须处理大量数据甚至无限流,所以我无法先收集数据并再次流式传输结果.

需要分组的所有元素在第一个流中是连续的.因此我喜欢让流评估保持懒惰.

java grouping java-8 java-stream

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

如何在生产中使用CDI测试类时注入模拟

我正在使用WELD-SE进行依赖注入的Java SE环境中进行编程.因此,类的依赖关系看起来像这样:

public class ProductionCodeClass {
    @Inject
    private DependencyClass dependency;
}
Run Code Online (Sandbox Code Playgroud)

在为这个类编写单元测试时,我正在创建一个模拟器DependencyClass,因为我不想为我运行的每个测试启动一个完整的CDI环境,我手动"注入"模拟:

import static TestSupport.setField;
import static org.mockito.Mockito.*;

public class ProductionCodeClassTest {
    @Before
    public void setUp() {
        mockedDependency = mock(DependencyClass.class);
        testedInstance = new ProductionCodeClass();
        setField(testedInstance, "dependency", mockedDependency);
    }
}
Run Code Online (Sandbox Code Playgroud)

setField()我使用我在测试中使用的工具在类中编写的静态导入方法:

public class TestSupport {
    public static void setField(
                                final Object instance,
                                final String field,
                                final Object value) {
        try {
            for (Class classIterator = instance.getClass();
                 classIterator != null;
                 classIterator = classIterator.getSuperclass()) {
                try {
                    final Field declaredField …
Run Code Online (Sandbox Code Playgroud)

java unit-testing mockito cdi

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

始终使用Cucumber-Java8获取异常"常量池索引处的错误类型"

我正在尝试为Cucumber的Java8方言设置一个示例项目.我的问题是,我没有让它运行.我总是得到以下异常层次结构:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.068 sec <<< FAILURE! - in soy.wimmer.CucumberIT
Feature: Cucumber with Java8  Time elapsed: 0.051 sec  <<< ERROR!
cucumber.runtime.CucumberException: Failed to instantiate class soy.wimmer.CucumberStepdefs
[…]
Caused by: java.lang.reflect.InvocationTargetException: null
[…]
Caused by: cucumber.runtime.CucumberException: java.lang.IllegalArgumentException: Wrong type at constant pool index
[…]
Caused by: java.lang.IllegalArgumentException: Wrong type at constant pool index
    at sun.reflect.ConstantPool.getMemberRefInfoAt0(Native Method)
    at sun.reflect.ConstantPool.getMemberRefInfoAt(ConstantPool.java:47)
    at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getTypeString(ConstantPoolTypeIntrospector.java:37)
    at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getGenericTypes(ConstantPoolTypeIntrospector.java:27)
    at cucumber.runtime.java.Java8StepDefinition.<init>(Java8StepDefinition.java:45)
    at cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend.java:162)
    at cucumber.api.java8.En.Given(En.java:190)
    at soy.wimmer.CucumberStepdefs.<init>(CucumberStepdefs.java:8)
[…]

Results …
Run Code Online (Sandbox Code Playgroud)

bdd cucumber java-8 cucumber-jvm cucumber-java

9
推荐指数
2
解决办法
4947
查看次数

如何使用vec!#![no_std]库中的宏?

在标准的Rust代码中,vec!宏位于前奏中,无需手动显示.我正在开发一个不使用标准库和集合的库#![no_std],所以前奏也不可见.

里面的测试代码,我正在使用标准库的功能,所以我有一个

#[cfg(test)]
extern crate std;
Run Code Online (Sandbox Code Playgroud)

从标准库访问函数和数据类型没有问题,但现在我想访问vec!(...)宏,我不知道如何.

use std::vec::vec!; 导致错误:

expected one of `::`, `;`, or `as` here 
Run Code Online (Sandbox Code Playgroud)

在感叹号的位置.

我该如何访问此宏?

rust

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

clj-http没有返回JSON

我正在尝试使用clj-http 2.2.0版从REST资源中读取JSON,但无论我做什么,我都将结果作为字符串.

在调试时,我在https://nym.at/test.json上的网络服务器上删除了我对此请求所做的操作:静态JSON文档:

{"foo":1,"bar":"baz"}
Run Code Online (Sandbox Code Playgroud)

我在REPL中运行以下代码(client绑定到命名空间clj-http.client):

(client/get "https://nym.at/test.json" {:as :json :insecure? true})
Run Code Online (Sandbox Code Playgroud)

我得到的结果是(手动打印):

{:status 200,
 :headers {"Server" "Apache/2.4.18 (Debian)",
           "Upgrade" "h2,h2c",
           "Content-Type" "application/json",
           "Content-Length" "22",
           "Strict-Transport-Security" "max-age=31536000; includeSubDomains",
           "Connection" "Upgrade, close",
           "Accept-Ranges" "bytes",
           "ETag" "\"16-532fcf29f30c6\"",
           "Date" "Mon, 16 May 2016 22:14:59 GMT",
           "Last-Modified" "Mon, 16 May 2016 22:14:27 GMT"},
 :body "{\"foo\":1,\"bar\":\"baz\"}\n",
 :request-time 637,
 :trace-redirects ["https://nym.at/test.json"],
 :orig-content-encoding nil}
Run Code Online (Sandbox Code Playgroud)

我的期望是错误的,{:as :json}应该导致clj-http将响应解析为JSON并将其撤回:body或者我在这里做错了吗?

json clojure clj-http

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

leiningen:项目“ lein run” /“ lein uberjar”上存在的类的ClassNotFoundException

我正在尝试实现遗留运行时所需的Java接口,我正在使用并实例化此实现的实例以将其传递给运行时。但是,当我运行时,lein uberjar我看到一个异常,即找不到该类。这两个名称空间是在同一个leiningen项目中定义的,因此,我希望它们能够彼此看到以及它们生成的类。

(ns man.core                                                                     
  (:require (man.gateway))                                                       
  (:import (man ManGate)                                                         
           (eu.m2machine.gw GatewayComponentFactory))                            
  (:gen-class))                                                                  

(defn -main [& args]                                                             
  (let [starter (.starter (GatewayComponentFactory/get))                         
        gateway (ManGate.)]                                                      
    (.startup starter gateway)))
Run Code Online (Sandbox Code Playgroud)

此代码尝试使用在同一项目中实现的类:

(ns man.gateway                                                                  
  (:import [eu.m2machine.gw.text GatewayIDFormatter])                            
  (:gen-class                                                                    
   :name man.ManGate                                                             
   :implements [eu.m2machine.gw.Gateway]                                         
   :prefix "gateway-"))                                                          

(defn gateway-startup [this])                                                    

(defn gateway-shutdown [this])
Run Code Online (Sandbox Code Playgroud)

到目前为止,接口所需的两种方法仅具有存根实现。他们可以在我编译代码后得到他们的代码。定义了接口(在添加为依赖项的工件中):

package eu.m2machine.gw;                                                         

public interface Gateway {                                                       
    void startup();                                                              
    void shutdown();                                                             
}
Run Code Online (Sandbox Code Playgroud)

我得到的异常是:

Exception in thread "main" java.lang.ClassNotFoundException: man.ManGate, compiling:(man/core.clj:1:1)
    at clojure.lang.Compiler.load(Compiler.java:7391)
    at clojure.lang.RT.loadResourceScript(RT.java:372)
    at clojure.lang.RT.loadResourceScript(RT.java:363)
    at clojure.lang.RT.load(RT.java:453)
    at clojure.lang.RT.load(RT.java:419)
    at clojure.core$load$fn__5677.invoke(core.clj:5893)
    at clojure.core$load.invokeStatic(core.clj:5892) …
Run Code Online (Sandbox Code Playgroud)

clojure leiningen clojure-java-interop

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

如何将 Option&lt;T&gt; 转换为零个或一个元素的迭代器?

我正在尝试将数字解码为整数,并且要么获取该数字的迭代器,要么获取空迭代器(如果它不是数字)。我尝试这样做:

let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())
Run Code Online (Sandbox Code Playgroud)

这不能编译。我收到以下错误消息:

let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())
Run Code Online (Sandbox Code Playgroud)

我有什么方法可以告诉我.unwrap_or(...),我不关心实际类型,但我会得到一个实现Iterator

traits rust

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

如果将结构移动到其他位置,Rust中是否有任何特征可以得到通知?

在微控制器的Rust和C代码的混合中,我有一个Rust数据结构,我必须知道我的程序的C部分.我得到了这个工作.

pub struct SerialPort {
    // ... some attributes ...
}
Run Code Online (Sandbox Code Playgroud)

我试图重构Rust代码,并希望在一个函数中生成Rust结构,该函数还在我的C代码中注册回调.

pub fn setup_new_port() -> SerialPort {
    let port = SerialPort::new();
    port.register_with_c_code();
    port
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为SerialPort当函数返回时,Rust会将我的类型变量的内存内容移动到不同的位置.在C代码中注册的地址指向(现已释放的)setup_new_port()堆栈帧,当它被移动到调用者的堆栈帧时,因此我的C代码将访问无效地址.

是否有任何我可以实施的特征在移动发生时得到通知?我可以在特征的实现中调整我的C代码中注册的地址.

我知道我可以通过在堆上分配我的结构来防止移动发生,但是我想避免这种情况,因为代码在微控制器上运行并且动态内存分配可能并不总是存在.

embedded move ffi rust

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

如何在不引起移动的情况下访问 Option&lt;T&gt; 中的 T?

我正在研究二叉搜索树实现中的插入函数。这是我的代码:

pub struct Node {
    data: i32,
    left: Option<Box<Node>>,
    right: Option<Box<Node>>
}

fn insert_at_root(mut root_node: Node, new_node: Node) -> Node { //not reference because root_node will be mutated
    if root_node.data > new_node.data { // value less than root
        if let Some(left) = root_node.left {
            insert_node(*left, new_node); // *left is a way to downcast box, i.e. *left = T from Box<T>
        }
        else {
            root_node.set_left(Some(Box::new(new_node)));
        }
    }
    else if root_node.data < new_node.data {
        if let Some(right) = root_node.right {
            insert_node(*right, new_node); …
Run Code Online (Sandbox Code Playgroud)

rust

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

当结果为空且右集具有更高的基数时,clojure.set/difference会失败

我尝试从一组中释放元素,这些元素存在于Clojure中的不同序列中.但clojure.set/difference似乎没有像我期望的那样起作用.我的错误在哪里?

一些例子:

删除空序列

(difference #{3 2} '())
Run Code Online (Sandbox Code Playgroud)

结果:( #{3 2}如预期的那样)

删除一些元素

(difference #{3 2} '(3))
Run Code Online (Sandbox Code Playgroud)

结果:( #{2}如预期的那样)

删除集合中不存在的元素

(difference #{3 2} '(1))
Run Code Online (Sandbox Code Playgroud)

结果:( #{3 2}如预期的那样)

删除所有元素

(difference #{3 2} '(2 3))
Run Code Online (Sandbox Code Playgroud)

结果:( #{}如预期的那样)

删除更多存在的元素

(difference #{3 2} '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

而不是结果我得到IllegalArgumentException包含?类型不支持:clojure.lang.PersistentList clojure.lang.RT.contains(RT.java:814)

预期结果: #{}

所以看起来,clojure.set/difference当结果是空集并且要删除的元素集具有比原始集更高的基数时,函数失败.但问题是:为什么这不起作用?我希望这是一个合法的应用程序clojure.set/difference.

set-theory clojure set

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