小编Mat*_*ell的帖子

重新设计使用带有抛出异常的Java 8 Map.computeIfAbsent()的方法

我正在尝试重做我的一些方法,使它们使用Java 8更简洁,我试图慢慢吸收它的新功能.

这是一种用于添加a value的方法Map<Key, Set<Value>>.有三个可能性:

  1. 密钥不存在:添加密钥并将包含该值的新集合与其关联.
  2. 密钥存在:该值将添加到现有集合中.请注意,集合永远不会null,因为我有一些先决条件来处理它.
  3. 密钥存在且值已包含在集合中:a IllegalArgumentException抛出.

实现此行为的代码如下,它不使用Java 8功能:

public void addValue(Key key, Value value) {
    // irrelevant preconditions...

    Set<Value> valuesForKey = myMap.get(key);
    if (valuesForKey != null && valuesForKey.contains(value))
        throw new IllegalArgumentException("Association exists already");

    if (valuesForKey == null)
        myMap.put(key, new HashSet<Value>(Arrays.asList(value)));
    else
        valuesForKey.add(value);
}
Run Code Online (Sandbox Code Playgroud)

我想使用像computeIfAbsent这样的Java 8方法缩短这段代码.

我可以总结最后一个if-else块,但是我无法通过key在执行前置条件检查时已经检索到的映射的值集的冗余.

public void addValue(Key key, Value value) {
    // irrelevant preconditions...

    Set<Value> valuesForKey = myMap.get(key);
    if (valuesForKey != null && …
Run Code Online (Sandbox Code Playgroud)

java java-8

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

使用Java 8 lambdas/transformations来组合和展平两个Maps

我有两张地图:

  • Map<A, Collection<B>> mapAB
  • Map<B, Collection<C>> mapBC

我想把它们变成一个Map<A, Collection<C>> mapAC,我想知道是否有一个平滑的方法来做lambdas和变换.在我的特定情况下,集合都是集合,但我想解决集合的问题.

我有一个想法是先将两张地图合并成a Map<A, Map<B, Collection<C>>>然后压平它,但我对任何方法都持开放态度.

数据注释:B应该只出现在与一个相关联的值集合中,A同样适用于mapBC(给定C的只映射到一个B).因此,应该只有一条从给定A到给定的路径C,尽管可能A -> B存在没有B -> C映射的映射,并且可能B -> C存在没有相应A -> B映射的映射.这些孤儿根本不会出现在结果中mapAC.

为了便于比较,以下是针对同一问题的纯粹必要方法的示例:

Map<A, Collection<C>> mapAC = new HashMap<>();

for (Entry<A, Collection<B>> entry : mapAB.entrySet()) {
    Collection<C> cs = new HashSet<>();

    for (B b : entry.getValue()) {
        Collection<C> origCs = mapBC.get(b);
        if …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

是否可以在Tomcat中关闭taglib扫描?

在启动时,Tomcat递归扫描WEB-INF目录中的TLD(标记库描述符)文件.因此,如果webapp在该目录下有很多文件,则会降低启动过程的速度.有没有人知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围?

java tomcat taglib

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

您可以在多个程序和安装程序上使用商业代码签名证书吗?

是否可以在多个程序和安装程序上使用商业代码签名证书?

我想购买Comodo证书,但由于成本,我需要用它来签署多个程序和安装程序.

谢谢

code-signing certificate

6
推荐指数
2
解决办法
1514
查看次数

CouchDB视图URL显示:CouchDB:{"error":"not_found","reason":"missing"} ...为什么?

例如:

  • 我的CouchDB托管在:example.com上
  • CouchDB数据库名称是:foo
  • 视图名称为:my_view

所以,当我把它们放在一起构建URL时,我得到:

以上网址显示:

 {"error":"not_found","reason":"missing"}
Run Code Online (Sandbox Code Playgroud)

为什么会出现这个错误?

预期结果是列出了与"my_view"视图对应的文档.

更多信息:

如果我访问http://www.example.com/foo,我会收到预期的回复:

{"db_name":"foo","...
Run Code Online (Sandbox Code Playgroud)

如果我访问http://www.example.com/foo/_design/my_view,我会收到预期的回复:

{"_id":"_design/my_view","_rev":"...
Run Code Online (Sandbox Code Playgroud)

我在Windows7/Chrome上使用CouchDB v1.0.2

我的设计文档的完整内容(显示的是真实值,而不是example.com)

{
  "_id":"_design/locations",
  "_rev":"1-0f7fbdd2f5b4213591e171b6e546af3a",
  "language":"javascript",
  "views": {
    "locations": {
      "map":"function(doc) {\n  emit(doc.type === \"location\" && doc.name);\n}"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

couchdb view

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

如何使用Reactive Extensions按空闲时段对事件进行分组

我有一个问题,Reactive Extensions似乎特别适合.我有一个事件源,它在短时间内创建事件,中间有相对较长的空闲时间.我想分批对这些事件进行分组,其中(理想情况下)每一系列事件最终会在一批中结束.使用RxJava,有一个很好的方法吗?Observable.buffer(Observable)Observable.buffer(Func0)似乎很有希望,但可以使用Observable.window()或Observable.groupByUntil().

rx-java

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

从 Bazel 中调用 Checkstyle 的最佳方式是什么?

我正在尝试添加对调用 Checkstyle 的支持,作为我们 Bazel 构建的一部分。我已经看到一些代码使用额外操作来实现这一点,但我希望避免这种方法并使其与纯 Skylark 代码一起使用。我设法使用以下(糟糕的)genrule 来让 JVM 在一组源文件上执行 Checkstyle,但我意识到这是令人难以置信的 hacky:

native.genrule(
    name = name,
    srcs = srcs,
    outs = ["src_output.txt"],
    cmd = "$(JAVA) -Dconfig_loc=<full-config-loc-path> -classpath <path>/checkstyle-8.4-all.jar com.puppycrawl.tools.checkstyle.Main -c <config-file-path> -o $@ $(SRCS)",
    **kwargs
)
Run Code Online (Sandbox Code Playgroud)

关于如何以正确的方式做到这一点有什么建议吗?我已经在 dependency.bzl 文件中拥有所有必需的 JAR 依赖项,因此我很乐意引用这些依赖项而不是 checkstyle-all JAR。

java checkstyle bazel

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