【问题标题】:how to efficiently remove null from the list? [duplicate]如何有效地从列表中删除 null? [复制]
【发布时间】:2020-02-05 06:22:33
【问题描述】:

在 coreValues 的映射包含以下内容的场景中: 值 1 -> 列表(“1”、“2”、null、“3”) 我想从列表中过滤掉空值,我有 以下解决方案:

 boolean hasCoreValues = false;
 Optional<Map<String,List<String>> coreValues = buildCoreValuesMap(core); 
 hasCoreValues = corevalues.map(cv -> {
    final List<String> values = cv.getOrDefault(value, Immutable.of())
    values.removeAll(singletonList(null));
    return !values.isEmpty();
 }).orElse(false);



public Optional<Map<String, List<String>>> buildCoreValuesMap(String core) {
        return Optional.ofNullable(context.selectFrom(DataStorage)
                .where(DataStorage.CORE.in(core))
                .fetchGroups(DataStorage.CORE,
                        DataStorage.VALUES));
    }

有没有更好的方法来做到这一点,而无需再次通过列表删除空值?

【问题讨论】:

  • values.removeAll(singletonList(null)) 我正在使用删除null的方法,它不是重复的问题。我的问题是如何在不重复两次的情况下删除 null。
  • 你能把这个方法的代码给我buildCoreValuesMap吗?

标签: java


【解决方案1】:

如果您只想从coreValues 中删除List&lt;String&gt; 中的所有null,则只需迭代Map 并使用removeIf 从列表中删除所有null

coreValues.forEach((k,v)-> v.removeIf(Objects::isNull));

【讨论】:

  • 当然,如果你写了buildCoreValuesMap(),你可能会首先使用过滤器将它们排除在外。
  • 我可以避免两次迭代地图吗?
  • 你能显示你迭代地图的第一个地方吗? @MikasaAckerman
  • 好吧,我现在无法提供答案,因为该问题已被标记为重复。但 Deadpool 可以在编辑上添加标签,并可能会向您展示如何操作。
  • 为了做到这一点,OP需要显示buildCoreValuesMap@WJS的代码
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多