java - 在Java中将包装的流转换为另一个流
问题描述
我需要将另一个流中的包装流转换为映射。
public Map<String, MyObject> convert(Stream<Stream<MyObject>> myobjects) {
Map<String, MyObject> processedTransactionMap = new HashMap<String, MyObject>();
// convert process.. key of map is any String variable of MyObject
return processedTransactionMap;
}
谢谢你。
解决方案
由于多个MyObject
可能具有相同的String
键,您应该解释您如何需要聚合数据。
无论如何,有两种主要方法可以做到这一点;一个完整的例子可能是:
public static void main(String... args) throws IOException {
// aggregate all with same key
Map<String, List<MyObject>> agg1 = makeExample()
.flatMap(x -> x) // stream of stream to one single stream
.collect(groupingBy( // group by
x -> x.key, // key
toList())); // if collision, aggregate to a list
// aggregate with collision
Map<String, MyObject> agg2 = makeExample()
.flatMap(x -> x)
.collect(toMap( // aggregate to single MyOject
x -> x.key, // grouping by key
x -> x, // taking MyObject
(a, b) -> new MyObject( // if collision form a new one
a.key, // with that key
a.data + b.data))); // addind data
// print results
System.out.println("== as list ==");
agg1.forEach((key, ys) -> {
System.out.printf(" ** %s%n", key);
ys.forEach(y -> System.out.printf(" %s%n", y));
});
System.out.println();
System.out.println("== joining ==");
agg2.forEach((key, y) -> {
System.out.printf(" ** %s%n", key);
System.out.printf(" %s%n", y);
});
}
static Stream<Stream<MyObject>> makeExample() {
return IntStream.range(1, 3)
.mapToObj(n -> IntStream.range(1, n + 1)
.mapToObj(j -> new MyObject(Integer.toString(n), j)));
}
static class MyObject {
public String key;
public int data;
public MyObject(String key, int data) {
this.key = key;
this.data = data;
}
public String toString() {
return String.format("{key: %s, data: %d}", key, data);
}
}
带输出
== as list ==
** 1
{key: 1, data: 1}
** 2
{key: 2, data: 1}
{key: 2, data: 2}
== joining ==
** 1
{key: 1, data: 1}
** 2
{key: 2, data: 3}
推荐阅读
- typescript - RxJS fromEventPattern with React Native events
- git - Remove Emacs backup files with .gitignore recursively
- php - Ajax 只在页面重新加载后提供数据
- angular - Value of loginError takes time to update in ts file
- javascript - Lazy load a html page using data stored in javascript array object
- mysql - Comparison operator is not working in MySQL query
- arrays - 数组扩展,其中 Element 是可选的,返回类型是 Wrapped
- excel - 在逗号分隔的字段中进行 Vlookup 搜索
- optimization - 使用(多个)条件三元运算符的性能是否比 GLSL 中的 if 语句更好
- java - 如何在 MongoTemplate 中使用多个 orOperator