小编taf*_*it3的帖子

如何使用Java 8中的函数映射将Map <K,V1>转换为另一个Map <K,V2>?

我想使用Java 8中的函数映射将a转换Map<String, Integer>为另一个Map<String, Long>映射,在两个映射中将数据与按键匹配的函数进行匹配.您可以假设两个地图都具有相同的键.

我尝试了以下方法:

Map<String, Integer> inputData = new HashMap<>();
inputData.put("A",8);
inputData.put("B",7);
inputData.put("C",6);

Map<String, Function<Integer, Long>> transformers = new HashMap<>();
transformers.put("A", x -> x*2L);
transformers.put("B", x -> x+3L);
transformers.put("C", x -> x+11L);

Map<String, Long> mappedData = inputData.entrySet().stream()
    .map(entry -> new AbstractMap.SimpleEntry<>(
         entry.getKey(),
         transformers.get(entry.getKey()).apply(entry.getValue())))
    .collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)

预期结果:{A = 16,B = 10,C = 17}.

在Java Streams API中是否有更简单的方法表达" 将变换器的映射应用于按键匹配的inputData映射 "?

java java-8 java-stream

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

如何使用Java Streams API合并Map列表和Lists值?

如何Map<X, List<String>>通过Xp 减少分组并同时加入所有列表值,这样我最后会有Map<Integer, List<String>>什么?

这是我到目前为止所尝试的:

class X {
    int p;
    int q;
    public X(int p, int q) { this.p = p; this.q = q; }
}
Map<X, List<String>> x = new HashMap<>();
x.put(new X(123,5), Arrays.asList("A","B"));
x.put(new X(123,6), Arrays.asList("C","D"));
x.put(new X(124,7), Arrays.asList("E","F"));
Map<Integer, List<String>> z = x.entrySet().stream().collect(Collectors.groupingBy(
    entry -> entry.getKey().p, 
    mapping(Map.Entry::getValue, 
        reducing(new ArrayList<>(), (a, b) -> { a.addAll(b); return a; }))));
System.out.println("z="+z);
Run Code Online (Sandbox Code Playgroud)

但结果是:z = {123 = [E,F,A,B,C,D],124 = [E,F,A,B,C,D]}.

我想要z = {123 = [A,B,C,D],124 = [E,F]}

java java-8 java-stream

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

XPath 中艾弗森括号最简单的语法是什么?

我想在 XPath 表达式中使用 Iverson 括号(即映射 true => 1, false => 0)。

示例:而不是写

someNumber+(if(elem1/elem2[@attr='123'])then(1)else(0)))*someOtherNumber
Run Code Online (Sandbox Code Playgroud)

我想写(但不知何故没有“艾弗森”)

someNumber+Iverson(elem1/elem2[@attr='123'])*someOtherNumber
Run Code Online (Sandbox Code Playgroud)

以下不起作用:

someNumber+[elem1/elem2[@attr='123']]*someOtherNumber
Run Code Online (Sandbox Code Playgroud)

转换为布尔值工作:

someNumber+boolean(elem1/elem2[@attr='123'])*someOtherNumber
Run Code Online (Sandbox Code Playgroud)

有没有比“if(...)then(1)else(0)”或“boolean(...)”更简单的语法?

xpath

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

如何在 XPath 2.0 中将 xs:dayTimeDuration 转换为毫秒?

我有一个 xs:dayTimeDuration 类型的值,我想知道这个持续时间中有多少毫秒。

示例:xs:dayTimeDuration 中的 3 分 5 秒PT3M5S为 185000 毫秒。

如何在 XPath 2.0 中将 xs:dayTimeDuration 转换为毫秒?

xpath xpath-2.0

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

标签 统计

java ×2

java-8 ×2

java-stream ×2

xpath ×2

xpath-2.0 ×1