我正在尝试合并一个流
例如,
final Map<String, someOtherObjectToProcess> someObject;
final List<Map<String, Map<String, String>>> list = someObject.entrySet()
.stream()
.flatMap(this::getInfoStream)
.collect(Collectors.toList());
getInfoStream的签名是
public Stream<Map<String, Map<String, String>>> getInfoStream(Map.Entry<String, someOtherObjectToProcess> entry)
如果我使用
(Collectors.toList())
我能够得到这些Map对象的列表。
如果使用上述代码,则输出示例:
[{
"name" : {
"property":"value"
}
},
{
"name2" : {
"property":"value"
}
}]
但我想收集到一张有结构的地图上
{
"name" : {
"property":"value"
},
"name2" : {
"property":"value"
}
}
前提是密钥是唯一的。
如何使用Collectors.toMap()或任何其他替代方法来做到这一点?
在我看来,最具可读性的方法是将所有内容映射到映射。输入,然后使用收集器::toMap将所有内容收集回地图
import static java.util.stream.Collectors.toMap;
// ...
someObject.entrySet()
.stream()
.flatMap(this::getInfoStream)
.flatMap(map -> map.entrySet().stream())
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (one, two) -> one));
<代码>(一,二)-
解决这个问题的另一种方法是不使用收集器(toList())
,而是使用另一个重载的。收集()
方法与供应商、累加器和组合器:
Stream<Map<String, Map<String, String>>> stream = ...
Map<String, Map<String, String>> result = stream
.collect(HashMap::new, HashMap::putAll, HashMap::putAll);
当你有
Stream<Map<String, Map<String, String>>> stream = ...
(我假设这是flatMap(this::getInfoStream)的结果)您可以调用
.flatMap(map -> map.entrySet().stream())
从将生成流的所有映射创建条目流
现在,从该流中,您需要做的就是从地图的每个条目中收集键和值。假设每个键在您可以使用的所有地图中都是唯一的
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
但若键不是唯一的,那个么您需要决定应该为同一个键在新映射中放置什么值。我们可以通过填写
零件输入
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (vOld, vNew) -> ...));
// ^^^
其中,
vOld
保存同一键下结果图中当前保存的值,而vNew
保存新值(来自当前流“迭代”)
例如,如果要忽略新值,只需返回旧值/当前由持有的值(vOld,vNew)-
简而言之(假设密钥唯一):
Map<String, Map<String, String>> combinedMap =
/*your Stream<Map<String, Map<String, String>>>*/
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
问题内容: 如何将无序列表居中放置为固定宽度? 问题答案: 要使ul 居中并使li元素也居中,并使ul的宽度动态变化,请使用display:inline-block; 并将其包裹在居中的div中。
问题内容: 如何使用CSS 在另一个文件中水平居中? 问题答案: 您可以将此CSS应用于内部: 当然,您不必将设置为。任何小于包含宽度的宽度都可以使用。是什么呢实际定心。 如果您以Internet Explorer 8(及更高版本)为目标,最好改用以下方法: 它将使内部元素水平居中,并且无需设置特定的 width。 这里的工作示例:
我得到了一个导入的文本块,但格式并不总是那么完美。之后我会尝试用jquery解决这个问题。所以我开始用 替换 : null null 但替换不起作用。最终的html应该如下所示:
我想用可选的。由于只能连接流,我有以下问题: 如何将可选 转换为流 ? 示例:
问题内容: 请告诉我如何将Java模块/源代码嵌入C#应用程序中?例如,我有一些用Java编写的逻辑,该逻辑使用了一些第三方库,这些库只能在Java平台上找到。而且我有用C#编写的主要主机逻辑。如果我能够将来自Java的回调注册到C#中,那将非常酷。 非常感谢你!!! 问题答案: 您可以尝试IKVM吗? IKVM.NET对于几种不同的软件开发方案很有用。这里是一些可能性的示例。 嵌入式JVM 在.
问题内容: 当我尝试粘贴到HTML文本文件中时,我总是被踢出外壳。如何才能做到这一点?我首先需要使用一些JavaScript对其进行编码吗? 例: 编辑 我只在HTML中放入单引号,然后将整个内容都用双引号引起来,但仍然没有好处。外壳错误: 问题答案: 您需要删除或编码字符串中的控制字符。 例如,将您的文本粘贴到此处,然后编码为UTF-8 ECMAScript(表示javascript字符串)。