Java 如何从kotlin中的列表中删除某些元素

Java 如何从kotlin中的列表中删除某些元素,java,arrays,json,kotlin,gson,Java,Arrays,Json,Kotlin,Gson,我在如何删除与某些参数不匹配的元素方面遇到了问题。例如,我有两个数据类:第一个和第二个 第一个包含第二个的属性,即城市、价格等: data class Properties(val city: String, val day: Int, val month: Int, val yearProp: Int, val dayEnd: Int, val monthEnd: Int, val yearEndProp: Int, val priceFrom: Int, val priceTo: Int)

我在如何删除与某些参数不匹配的元素方面遇到了问题。例如,我有两个数据类:第一个和第二个 第一个包含第二个的属性,即城市、价格等:

data class Properties(val city: String, val day: Int, val month: Int, val yearProp: Int, val dayEnd: Int, val monthEnd: Int, val yearEndProp: Int, val priceFrom: Int, val priceTo: Int)
项目的第二个数据类:

data class Product(var title: String, var price: String, var photoId : String)
我正在通过以下代码从json解析产品数据:

val gson = GsonBuilder().setPrettyPrinting().create()
val inputStream : Reader = context.getResources().openRawResource(R.raw.products).reader()
var productList: ArrayList<Product> = gson.fromJson(inputStream, object : TypeToken<List<Product>>() {}.type)
productList.forEach { println(it) }
所以,我想过滤它。若用户匹配“纽约”,则列表中的项目必须仅包含“城市”:“纽约”。是的,这只是举个例子,不要注意我在那里写的所有愚蠢:D


或者可能是我应该在添加项目时过滤项目?但是如果是这样的话,那么怎么做呢?

这里有一个解决方案。请注意,在OP中,您实际上根本没有从产品类中引用Properties类(因此您无法按属性筛选产品,因为它们在代码中没有任何关系)

另外,您正在使用var。var的属性是可变的(这意味着它们可以在对象创建后更改)。一般来说,最好使用val,并且如果您需要改变对象的属性,可以使用更新的属性创建一个新实例(对于多线程和异步代码来说更好)


下面是一个从现有列表中删除具有特定条件的项目的示例。此示例从整数列表中删除偶数

var myLists = mutableListOf(1,2,3,4,5,6,7,8,9)
myLists.removeAll{ it % 2 == 0 }
println(myLists)
印刷品:

[1, 3, 5, 7, 9]

你似乎遗漏了问题的一个关键部分,请容忍我,我会给你写一个解决方案……嗯。我试过了,发现了一些问题。请不要责骂我,直到现在我才知道这种可能性。因此,我发现我可以只使用removeIf({s->s.city!=MainActivity.props.city})(问题是我在MainActivity中填充属性)。但这个解决方案行吗?哎哟。它只是安卓牛轧糖。我不知道removeIf,但是,听起来它会从它调用的列表中删除元素(而filter会用过滤掉的元素创建一个新列表)。一般来说,这类函数称为高阶函数,因为它们以函数作为输入。例如,
filter
函数接受一个返回布尔值的函数。然后对列表中的每个元素调用传递的函数,如果返回true,则将该元素添加到新列表中,否则跳过。传递到
filter
的函数称为
谓词。我想我明白了。谢谢,这很有帮助。没问题,在不同的集合上练习使用这些高阶函数。谢谢!!我在研究循环、流、迭代器和if。太容易了!我是一个了不起的解决方案!谢谢
var myLists = mutableListOf(1,2,3,4,5,6,7,8,9)
myLists.removeAll{ it % 2 == 0 }
println(myLists)
[1, 3, 5, 7, 9]