【问题标题】:How to filter list if the "value" have a "null" or "0" in kotlin如果“值”在kotlin中有“null”或“0”,如何过滤列表
【发布时间】:2020-05-21 00:23:04
【问题描述】:

我有一个这样的列表:

listOf(1, null, 0)

我用这个过滤它:

_currentSource.value?.filter { it.nominalAmount != null || it.nominalAmount != 0 } as List<SourceDanaInvestasi>

但是过滤器不起作用,因为当我将它保存到 Room 并显示它时,在我的应用程序中显示所有值 (1, null, 0)

那么如何过滤它以仅在没有null0 的情况下发送数据?

【问题讨论】:

  • 什么是nominalAmount,是Double?而不是Int?
  • Int? 抱歉忘记编辑我的问题
  • 试试filter{ it.nominalAmount != null &amp;&amp; it.nominalAmount != 0 },因为你应该涵盖两种情况
  • value的类型是什么?显然,List&lt;Int?&gt; 不像您的示例 listOf(1, null, 0),因为您在不使用 null 安全调用的情况下调用项目 .nominalAmount 的某些属性。
  • @RRifaFauziKomara 当nominalAmount 为空时不为0,为0 时不为空。所以其中之一为真,结果值为真。这就是过滤列表中存在所有元素的原因。

标签: android kotlin filter


【解决方案1】:

【讨论】:

  • filterNotNull() 中有一条带有Useless call 消息的警告,最好删除它。所以我认为它不会起作用
  • 可能是开销,因为通过过滤空值然后再次过滤来创建一个全新的列表,即在列表上迭代两次。
  • 在我的代码中有_currentSource.value?,所以在filterNotNull() 中有一条警告消息Useless call
  • @RRifaFauziKomara 可能是因为 _currentSource.value 可能不会返回不可为空的列表,请检查其类型。
  • @AnimeshSahu 这将是一个开销,因为它会创建两个列表。您也可以将其用作序列,因此它只对结果而不是列表进行操作。
【解决方案2】:

您需要分配结果,您正在过滤,这会创建一个新列表,然后将结果转储到地板上。

_currentSource.value = _currentSource.value?.filter {
    it.nominalAmount != null && it.nominalAmount != 0
} as List<SourceDanaInvestasi>

您还需要将|| 更改为&amp;&amp;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多