当前位置: 首页 > 知识库问答 >
问题:

通过<String,Set<String>的映射过滤传入事件

阎德义
2023-03-14

我正在寻找一种方法来整齐地过滤事件中的值并基于它们创建地图。我们需要知道的:

事件:事件包含字典数据结构(它是

例如:a)

Key: Brand, 
Value: Nike

b)

Key: Producer,
Value: Audi

过滤器是一个<代码>映射

值的示例:

Key: Manufacturer,
Value: [Brand, Producer, Creator, Author]
data class Product(
    val id: String,
    val parameters: Map<String, Parameter> = emptyMap()
) 
data class Parameter(
        val parameterId: String?,
        val parameterValue: String)

流程看起来如何:

1)事件附带参数列表,例如

mapOf(
"brand" to "Nike",
"size" to "42",
"color" to "black
)
mapOf("Manufacturer" to Parameter(null, "Nike"))

如您所见,在Product对象的映射中,选择了Manufacturer(制造商)而不是Brand(品牌)作为键(即该参数的键,而不是值)。

目标:

过滤事件的方法应该是什么样的?如何用聪明的科特林方式(使用地图过滤数据

提前感谢您的帮助/建议!

编辑:更多信息:
示例输入:
域端出现的传入事件:

< code > ProductCreatedEvent(id = " 1234 ",mapOf("brand "到" Nike "," color "到" black "," size "到" 46"))

样品输出:

产品(id = “1234”, mapOf(“制造商”到“耐克”))

传入事件由结构为 Map 的筛选器过滤

过滤器的结构是由这样一个事实决定的,即数据来自各种来源,因此,例如,供应商一方的“制造商”密钥可能被称为“品牌”或“生产者”。在我的服务方面,它是标准化的,因此每个键的键值是在域对象的参数映射中选择的。


共有1个答案

仉高昂
2023-03-14

这应该有效

val event = ProductCreatedEvent( id = "1234", mapOf("Brand" to "Nike", "Color" to "Black", "Size" to "46"))

val filters = mapOf("Manufacturer" to setOf("Brand", "Producer", "Creator", "Author"))

val parameters = event.params.mapNotNull { param ->
    filters.entries.find { it.value.contains(param.key) }
        ?.let {  it.key to param.value }
}.toMap()
val product = Product(event.id, parameters)
 类似资料:
  • 问题内容: 我正在使用SWIG从Java访问C ++代码。 公开非常量引用传递的std :: string参数的最简单方法是什么? 我有参考暴露为Java数组传递原语,感谢typemaps.i,和s ^暴露,感谢std_string.i。但是非const std :: string&被公开为不透明指针类型。 当前: 期望的: 更新 :我找到 了 解决方案,如下所述。但是,它花费了超过几秒钟的时间。

  • 问题内容: 我正在尝试将字符串数组作为POST数据传递给PHP脚本,但是不确定该怎么做。 这是到目前为止我执行PHP脚本的代码: 我试图传递数组的地方: 调用PHP脚本: 以及相关的PHP脚本: 有任何想法吗?谢谢 ! 编辑 我正在尝试以下方法,但仍不满意: 这就是我所有的“错误报告” … 问题答案: 要将查询字符串中的数组传递给php,您应该添加到标识符并将每个项目都添加为单独的条目,因此这样的

  • 我试图通过映射[objectid: String,Int]过滤包含对象的Seq[Object],其中Object.id是映射中的一个键。 我想返回一个新的Map,其中只包含id在原始映射中的对象及其Int值。因此函数应该返回Map[Object,Int] 这是我到目前为止的情况?实现这一目标的最佳方法是什么?

  • 字符串statusCode 在映射中,我有: statusCode列:“STATUS_CD”,类型:“NVARCHAR” beanCreationException:创建名为“Transaction ManagerPostProcessor”的bean时出错: bean初始化失败;嵌套异常是 org.springframework.beans.factory.beanCreationExcepti

  • 我刚开始使用RxJava/RxAndroid,在理解如何正确处理背压方面有一些问题。 我有一个文件扫描器,可以扫描目录并发出文件。应尽快处理这些文件,并且不跳过任何文件。 所以管道看起来像这样:<代码>可观察 不幸的是,我收到了rx。例外情况。缺少背压异常错误。所以我读了关于背压的书,如果我理解正确的话,无损耗选项只是缓冲区和窗口。 我试过了BackPressureBuffer()、buffer(

  • 如何使用注释填充值映射,而不在applicationContext中定义任何内容。xml或任何其他xml文件。 我使用的是SpringBoot,它没有任何XML文件,也不需要任何XML文件,所以请不要告诉我用XML等声明任何属性读取器bean。 此外,这是一个属性注入问题-请不要建议使用数据库存储数据-这不是一个答案,对于我的情况也不可能。 此外,我也不能使用YAML(由于部署/操作需求)。 我已