Java 8中是否有任何方法可以将元素分组java.util.stream.Stream而不收集它们?我希望结果Stream再次出现.因为我必须处理大量数据甚至无限流,所以我无法先收集数据并再次流式传输结果.
需要分组的所有元素在第一个流中是连续的.因此我喜欢让流评估保持懒惰.
我正在使用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) 我正在尝试为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) 在标准的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)
在感叹号的位置.
我该如何访问此宏?
我正在尝试使用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或者我在这里做错了吗?
我正在尝试实现遗留运行时所需的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) 我正在尝试将数字解码为整数,并且要么获取该数字的迭代器,要么获取空迭代器(如果它不是数字)。我尝试这样做:
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?
在微控制器的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代码中注册的地址.
我知道我可以通过在堆上分配我的结构来防止移动发生,但是我想避免这种情况,因为代码在微控制器上运行并且动态内存分配可能并不总是存在.
我正在研究二叉搜索树实现中的插入函数。这是我的代码:
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) 我尝试从一组中释放元素,这些元素存在于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.