我有一个Group
模型,其中包含一个内部字段List
如何通过lambda和流将以下代码更改为一行
Map<String, String> entityGroup = new HashMap<>();
groups.forEach(g -> g.getEntities()
.forEach(e -> entityGroup.put(e.getKey(), g.getKey()))
);
内部列表中的每个实体都应该是映射中的键,值应该是组本身
谢谢
这是一个可运行的示例,不需要您像上面的解决方案那样显式创建新条目:
import java.util.*;
import java.util.stream.*;
public class MyClass {
public static void main(String args[]) {
List<B> b1 = List.of(new B("a", "1"), new B("b", "2"));
List<B> b2 = List.of(new B("x", "3"), new B("y", "4"));
A a1 = new A(b1);
A a2 = new A(b2);
List<A> allAs = List.of(a1, a2);
Map<String, String> map =
allAs.stream().flatMap(a -> a.vals.stream())
.collect(Collectors.toMap(B::getKey, B::getValue));
System.out.println(map); // {a=1, b=2, x=3, y=4}
}
}
class A {
List<B> vals;
public A(List<B> vals) { this.vals = vals; }
}
class B {
String k, v;
public B(String k, String v) { this.k = k; this.v = v; }
public String getKey() { return this.k; }
public String getValue() { return this.v; }
}
要使用streams实现这一点,您需要创建一个map-entries流,然后将它收集到一个< code>Map中。
我在我的示例中使用了 Map.entry
,它在 Java 9 及更高版本中可用。如果你使用的是Java 8,你可以使用AbstractMap.SimpleEntry
或其他类型的Pair
类。
大概是这样的:
java prettyprint-override">Map<String, String> entityGroup = groups.stream()
.flatMap(group -> group.getEntities().stream()
.map(entity -> Map.entry(entity.getKey(), group.getKey())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
问题内容: 我有一张地图清单。 列表中的值例如是 最后,我想要一个Map>,就像 如何在Java中实现这一目标。 代码: 现在,基于与我想要的相同ID,此genericList是该列表的输入并来自此列表 基本上,要根据ID将响应归类为String,将具有相同ID的响应分组在列表中,然后创建一个以ID为键并以列表为值的新映射。 问题答案: 您可以使用Java 8进行以下操作: 这将打印: 整数:1
我在考虑用更现代的东西取代一些旧的比较器代码。 我知道Java 8的Comparator方法,所以上面的方法可以变成: 但是,我需要为每次比较写出和,这有点烦人。理想情况下,我只需输入一个列表或多个lambda。 比如: 下面是我得到的最接近的结果,其中一些注释部分指出了由于泛型不匹配而无效的内容。症结似乎在于我想传入多个
情况:我有一个包含多个子和子子对象的大对象,其属性包含多个数据类型。出于我们的目的,该对象类似于以下内容: 我需要遍历这个对象并构建一个键列表来显示层次结构,因此列表最终如下所示: 我得到了这个函数,它确实循环遍历对象并吐出键,但不是分层的: 有人能告诉我怎么做吗?这里有一个jsfiddle供您使用:http://jsfiddle.net/tbyna/
问题内容: 我有以下问题: 如何将以下代码片段转换为Java 8 lambda样式? 不知道,从以下内容开始: 问题答案: 您需要将自己的流放入列表: 有关其他信息,请访问文档 只是可以写成的另一种形式(因为类型将由编译器推断)
毫无头绪,从以下入手:
我有一张地图清单