我被困在分裂一个数组在一个对象的子数组。我有以下几点:
输入/输出类:
{
attribute1: 'value1',
attribute2: 'value2',
// etc.
assets: [
{assetAttribute1: 'value1', // etc.},
{assetAttribute2: 'value2', // etc.}
// etc.
]
}
流输入:
inputs = [
{
attribute1: 'value1',
attribute2: 'value2',
assets: [
{assetAttribute1: 'value1', // etc.},
{assetAttribute2: 'value2', // etc.}
// etc.
]
},
]
预期流输出:
outputs = [
{
attribute1: 'value1', // same as from the input
attribute2: 'value2', // same as from the input
assets: [
{assetAttribute1: 'value1', // etc.} // input asset array index 0
]
},
{
attribute1: 'value1', // same as from the input
attribute2: 'value2', // same as from the input
assets: [
{assetAttribute2: 'value2', // etc.} // // input asset array index 1
]
},
]
代码:
KStream<String, AClass> inputs = //...
KStream<String, AClass> output = inputs.map((key, aclass) -> {
return aclass.getAssets().stream().map(asset -> {
AClass transform = new AClass();
transform = aclass.clone();
transform.setAssets(Arrays.asList(asset));
return new KeyValue<String, AClass>(key, miaTransitAsset);
});
});
如你所见,这是行不通的。但我现在被困在如何用java流实现这一点上。你可以忽略Kafka流,因为它基本上是一样的。
谢谢你的帮助!
2条答案
按热度按时间zzoitvuj1#
使用一个流是可以管理的,但是,为了可读性,让我分开这个拳头:
为了简单起见,我自己创建了一个类(希望是从json描述中得到的):
然后进行一些愚蠢的初始化以处理一些数据:
羔羊来了:
首先,必须获取要提取的所有属性(将在其上创建新对象的资产列表):
然后,对于这些资产中的每一个,您都需要一个您以前在输入中拥有的内容的副本,但是“资产”列表内容有所不同。因此,最好的方法是为每个先前提取的资产创建一个新对象:
这应该有用:)
或使用一个流:
zdwk9cvp2#
谢谢你的帮助ław g公司ę西涅克。你激励我从另一个方向思考,我想我现在找到了一个方法: