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

使用静态编程语言中的Map过滤对象列表

耿建弼
2023-03-14

我正在尝试创建一个字典过滤器来过滤传入的参数列表。
问题是,当列表中有应该过滤和删除的参数时-我得到一个NullPointerExc的。
基本信息:
这是过滤器的外观:

data class Filter(
    val filters: Map<ParameterName, Set<String>>
)

data class ParameterName(
    val key: String
)

过滤器示例:

Filter(filters={ParameterName(key=Manufacturer)=[brand, producer]})

过滤列表(<code>列表

data class Parameter(
    val id: String?,
    val name: String?,
    val values: List<String>?
)

列表示例

[Parameter(id=123, name=brand, values=[Nike]), Parameter(id=345, name=color, values=[black, pink]), Parameter(id=823, name=test, values=[some, thing])]

逻辑是过滤列表被改变为映射

b)将参数值(如Nike)分配给parameter value对象(val value: String)。

我准备了什么:

        fun filterParameters(
            parametersList: List<Parameter>,
            filters: Map<ParameterName, Set<String>>
        ): Map<String, ParameterValue> {
            return parametersList.associate { param ->
                filters.filter {
                    it.value.first().equals(param.name, ignoreCase = true)
                }.keys.first().key to ParameterValue(value = param.values!!.first())
            }.toMap()
        }

流程示例:

  1. 输入方法:
    a)参数列表:
        listOf(
            Parameter(
                "123",
                "brand",
                listOf("Nike")
            ),
            Parameter(
                "345",
                "color",
                listOf("black", "pink")
            ),
            Parameter(
                "823",
                "test",
                listOf("some", "thing")
            )
        )

b) 过滤器:

        mapOf(
            ParameterName("Manufacturer") to setOf("brand", "producer")
        )

2)预期产量:

{Manufacturer=ParameterValue(value=Nike)}

预期输出结构:

Map<String, ParameterValue>

在哪里

data class ParameterValue(
val parameterId: String? = null,
val value: String,
val valueId: String? = null

)

所以我们只填充值 - 字符串


共有1个答案

侯焱
2023-03-14
data class Parameter(
  val id: String?,
  val name: String?,
  val values: List<String>?
)

val parameters = listOf(
  Parameter("123", "brand", listOf("Nike")),
  Parameter("3433", "color", listOf("red", "black")),
  Parameter("22313", "model", listOf("air max")),
  Parameter("2312", "origin", listOf("USA")),
  Parameter(null, "size", listOf("7", "7.5", "8", "9")),
  Parameter("987", null, listOf("lalala")),
  Parameter("999", "code", null),
  Parameter(null, null, null)
)

val filters = mapOf(
  "Manufacturer" to setOf("brand", "producer"),
  "Country" to setOf("origin", "from")
)

fun getValuesForParameterName(parameters: List<Parameter>, filters: Map<String, Set<String>>): Map<String, List<String>> {
  return parameters
    .filter { parameter -> parameter.name in filters.flatMap { map -> map.value } }
    .map { parameter -> filters.filter { map -> map.value.contains(parameter.name) }.keys.first() to parameter.values }
    .groupBy { (name, _) -> name }
    .map { (name, values) -> name to values.map { (_, list) -> list ?: emptyList() }.flatten() }
    .toMap()
}

val result = getValuesForParameterName(parameters, filters)
println(result)                   // Output: {Manufacturer=[Nike], Property=[USA]}
println(result["Manufacturer"])   // Output: [Nike]
println(result["Country"])        // Output: [USA]
 类似资料:
  • 如何在 Kotlin 中制作 2D Int 数组?我正在尝试将此代码转换为 Kotlin: 这是我尝试过的一个尝试,第一个2D阵列不起作用,但我让1D阵列起作用了:

  • 这两个代码片段有什么区别?以及如何决定使用哪一个? 和 有了这两个代码,我可以像这样通过索引访问它

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 我有两个单选组(组1和组2),分别包含3个单选按钮。我用这个准则把左右两列分开,各占一半。由于两个无线组是分开的,当用户单击组1时,我希望清除组2中的选定项(如果有)。任何想法都可以做到,因为我是由Kotlin编写的,所以我在stackoverflow ConstraintLayout、RadioGroup和RadioButton RadioGroup的两列中找到了一些示例,其中两列有十个单选按钮

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 我正在尝试用Java编写下面用Kotlin编写的代码。我无法创建DefaultElementsAdapter,因为我无法获得正确的语法。 我无法获得正确的Java代码 Kotlin班是这样的 我正在尝试使用图书馆https://github.com/m7mdra/HtmlRecycler