小编man*_*ni0的帖子

Java 8 Lambda(一步分组和缩减)

假设我有一个Pair对象列表,

List<Pair<A,B>> listOfPairs = //some list of pairs ; 
Run Code Online (Sandbox Code Playgroud)

我想将此列表分组为Map<A,Set<B>>.

目前,我可以分两步完成.第一步按A组,并返回 Map<A,Set<Pair<A,B>>如下:

   Map<A,Set<Pair<A,B>> intermediateStep =   listOfPairs.stream().collect(Collectors.groupingBy((Pair::getLeft), Collectors.toSet()));
Run Code Online (Sandbox Code Playgroud)

然后我流式传输上面地图的入口集并将它们收集到所需的最终结果中,主要是通过将每个Pair对象映射到其B值,并将它们收集到一个集合中:

 Map<A, Set<B>> finalResult= intermediateStep.entrySet().stream().collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue().stream().map(Pair::getRight).collect(Collectors.toSet())));
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现预期的结果,也许是一步到位?换句话说,上述中间步骤按A分组,但分组的右侧返回整个Pair对象.我想按A分组,并在一步中将A指向其相关B的集合.

(我知道,仅仅因为我可以一步到位,并不意味着我应该这样做,因为可读性可能会受到影响,但我很好奇.)

谢谢!

java lambda grouping java-8 java-stream

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

bazel rules_go:将二进制文件链接到工作区中另一个目标生成的静态 C++ 库(.a 文件)

我在我的 go 二进制文件中使用 confluent-kafka-go 库,这个库需要与 librdkafka 链接。我项目中的其他目标使用 librdkakfa,所以我使用 rules_foreign_cc 的 cmake_external 规则生成了静态 librdkafka.a 和 librdkafka++.a:

   //this is my "third_party/kafka/BUILD" file:

load("@rules_foreign_cc//tools/build_defs:cmake.bzl", "cmake_external")

    cmake_external(
        name = "librdkafka",
        cache_entries = {
            "RDKAFKA_BUILD_STATIC": "ON",
            "WITH_ZSTD": "OFF",
            "WITH_SSL": "OFF",
            "WITH_SASL": "OFF",
            "ENABLE_LZ4_EXT": "OFF",
            "WITH_LIBDL": "OFF",
        },
        lib_source = "@kafka//:all",
        static_libraries = [
            "librdkafka++.a",
            "librdkafka.a",
        ],
        visibility = ["//visibility:public"],
    ) 
Run Code Online (Sandbox Code Playgroud)

生成 librdkafka 库和头文件就好了:

 $ bazel build //third_party/kafka:librdkafka 
INFO: Analysed target //third_party/kafka:librdkafka (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //third_party/kafka:librdkafka up-to-date:
  bazel-genfiles/third_party/kafka/librdkafka/include …
Run Code Online (Sandbox Code Playgroud)

bazel librdkafka

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

标签 统计

bazel ×1

grouping ×1

java ×1

java-8 ×1

java-stream ×1

lambda ×1

librdkafka ×1