我想使用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映射 "?
如何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]}
我想在 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(...)”更简单的语法?
我有一个 xs:dayTimeDuration 类型的值,我想知道这个持续时间中有多少毫秒。
示例:xs:dayTimeDuration 中的 3 分 5 秒PT3M5S为 185000 毫秒。
如何在 XPath 2.0 中将 xs:dayTimeDuration 转换为毫秒?