我想使用parallelStream并行化以下代码:
boolean anyTrue() {
for (Element e : setOfE) {
if (eval(e)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
以下是否可以在并行流上使用并定期进行短路评估?
setOfE.parallelStream().map(e -> eval(e)).reduce(false, (a,b) -> a || b))
Run Code Online (Sandbox Code Playgroud) 当我访问https://console.developers.google.com时,我无法使用任何产品.我总是被迫开始免费试用(300美元).但是,该描述包含"此服务仅可用于商业或商业原因"的限制.这是否意味着您不能将谷歌云平台用作私人客户?
这个例子用gcc 4.8.3编译并运行良好:
#include <memory>
#include <functional>
#include <iostream>
int main() {
auto str = new const char[6]{'h', 'e', 'l', 'l', 'o', '\0'};
std::unique_ptr<const char[], std::function<void(const char *)>> u_ptr(str, [](const char *s){ delete[] s; });
std::cout << u_ptr.get() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用Visual Studio Professional 2013时,它无法编译(抱怨已删除的功能).Visual Studio 2013还没有这个功能吗?或者我的示例代码是错误的,gcc忽略了我的错误?
错误是:
main.cpp(8):错误C2280:'std :: unique_ptr> :: unique_ptr>(_ Ptr2,_Dx2)':尝试用[_Ptr2 = const char*,_Dx2 = main ::] C:引用已删除的函数程序文件(x86)\ Microsoft Visual Studio 12.0\VC\INCLUDE\memory(16 16):请参阅'std :: unique_ptr> :: unique_ptr'的声明
我刚刚开始使用dagger 2并且之前没有使用任何其他依赖注入框架.现在我陷入了循环依赖,我不知道如何正确解决它.请考虑服务器应用程序中的以下示例,该应用程序将Reactor模式与Java NIO一起使用:
我有一个Handler对象附加到选择键,当新信息到达网络时执行该选择键:
class Handler implements Runnable {
Server server;
Client client;
public void run {
// static factory method that eventually calls a method on server, passing in 'client' as argument
Command.parse(input).execute(server, client);
}
public void send(String string) {
// enqueu string and inform reactor about interest in sending
}
}
Run Code Online (Sandbox Code Playgroud)
本Client类包含有关连接的客户端的一些状态.所有连接的客户端都在Server类中.
class Client {
Handler h;
public send(String response) {
h.send(response);
}
}
Run Code Online (Sandbox Code Playgroud)
当新输入到达时,处理程序创建Command对象,在服务器上执行它们,服务器最终将响应客户端.
所以我现在正在做的是 …
而不是像这样使用匿名类
register(new EventListener() {
@Override
public void apply(Event e) {
// do your work
}
});
Run Code Online (Sandbox Code Playgroud)
使用java 8我可以使用lambda表达式:
register(e -> (// do your work));
Run Code Online (Sandbox Code Playgroud)
但是如果我的界面中的方法被注释呢?
interface EventListener {
@Annotation
void apply;
}
Run Code Online (Sandbox Code Playgroud)
是否可以注释lambda表达式?(具体来说,我想使用带有lambda表达式的Guava的EventBus.register()方法)
DefaultFileSystemProvider例如,如何设置要使用JimfsFileSystemProvider?javadoc FileSystems.getDefault()说我需要设置一个系统属性,但当我尝试这样做时,我得到一个NoSuchMethodException:
System.setProperty("java.nio.file.spi.DefaultFileSystemProvider",
"com.google.common.jimfs.JimfsFileSystemProvider");
FileSystems.getDefault();
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
java.lang.Error: java.lang.NoSuchMethodException: com.google.common.jimfs.JimfsFileSystemProvider.<init>(java.nio.file.spi.FileSystemProvider)
at java.nio.file.FileSystems$DefaultFileSystemHolder.getDefaultProvider(FileSystems.java:128)
....
Run Code Online (Sandbox Code Playgroud)
我是否需要设置其他内容或者这是jimfs中的错误?
在docker中管理和备份数据的建议策略如下所示:
docker run --name mysqldata -v /var/lib/mysql busybox true
docker run --name mysql --volumes-from mysqldata mysql
docker run --volumes-from mysqldata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
但是,当我以这种方式备份运行容器时,我不会获得一致的备份,是吗?我知道像这样的工具mysqldump,但是如果我需要备份,例如,不断添加和删除文件的文件夹,该怎么办?
考虑这个转换示例(请参阅有关此处应发生的情况的详细说明):
Map<String, Integer> transform(Map<Integer, List<String>> old) {
old.entrySet().stream()
.flatMap(entry -> entry.getValue().stream()
.map(letter -> letter.toLowerCase())
.map(lowerCaseLetter -> new SimpleEntry<String, Integer>(lowerCaseLetter, entry.getKey())))
// at this point, the type is Stream<Object>, not Stream<SimpleEntry<String,Integer>>
.collect(Collectors.toMap());
}
Run Code Online (Sandbox Code Playgroud)
为什么关于特定类型的信息在这里丢失了,我该如何解决这个问题?
(参考这篇文章:如何从枚举构造函数中抛出异常?)
我真的想做同样的事情.示例代码:
public enum PublicIPWebservice {
AMAZON_WEB_SERVICES("http://checkip.amazonaws.com"),
EX_IP("http://api-ams01.exip.org/?call=ip"),
WHAT_IS_MY_IP("http://automation.whatismyip.com/n09230945.asp");
private URL url;
private PublicIPWebservice(String url) throws MalformedURLException {
this.url = new URL(url);
}
public URL getURL() {
return url;
}
}
Run Code Online (Sandbox Code Playgroud)
如果url不正确,程序应该崩溃,因为这将是一个编程错误,所以在构造函数中捕获异常会是错误的,不是吗?
解决这个问题的最佳方法是什么?
我了解Spock 中的子句数据驱动测试where。但我如何扩展它以使用一个where进行多个测试呢?
例如,我有一组想要针对不同版本的库运行的测试:
@Unroll
def "test1 #firstlibVersion, #secondLibVersion"() {...}
@Unroll
def "test2 #firstlibVersion, #secondLibVersion"() {...}
...
Run Code Online (Sandbox Code Playgroud)
where 子句可能如下所示:
where:
[firstlibVersion, secondLibVersion] <<
[['0.1', '0.2'], ['0.2', '0.4']].combinations()
Run Code Online (Sandbox Code Playgroud)
我不想在每个测试中重复同样的 where 子句。我可以通过读取测试中的环境变量并使用不同的环境变量多次运行测试套件来实现这一点(测试矩阵样式,因为 travis 等 CI 服务支持它)。
但我更愿意直接在测试中执行此操作,这样我就不必多次运行测试套件。Spock 以某种方式支持这一点吗?
Guava 中有什么东西可以让我将 Multimap 的逆作为(非多)Map 得到?
考虑以下:
static final ImmutableMap<Token, Integer> precedences =
new ImmutableSetMultimap.Builder<Integer, Token>()
.put(0, NOT)
.put(1, ASSIGN)
.put(2, OR)
.put(3, AND)
.putAll(4, NOT_EQUAL, EQUALS)
.putAll(5, LESS_EQUAL, LESS, GREATER_EQUAL, GREATER)
.putAll(6, ADD, SUB)
.putAll(7, MUL, DIV, MOD).build().inverse();
Run Code Online (Sandbox Code Playgroud)
问题是inverse()它又是一个Multimap,而不是一个Map。Guava 中有什么东西可以为我进行转换,还是我必须推出自己的实用功能?
java ×7
lambda ×3
java-8 ×2
backup ×1
c++ ×1
consistency ×1
constructor ×1
dagger-2 ×1
docker ×1
enums ×1
exception ×1
groovy ×1
guava ×1
java-stream ×1
jimfs ×1
multimap ×1
nio ×1
spock ×1
testing ×1
unique-ptr ×1
visual-c++ ×1