【问题标题】:filtering hashmap list with a character用一个字符过滤 hashmap 列表
【发布时间】:2020-07-03 15:02:39
【问题描述】:

我有以下列表,其中包含来自 sql server 的哈希映射字符串值并显示为列表。

 List<Map<String, String>> data = new ArrayList<>();
 Map<String, String> datanum = new HashMap<String, String>();
 datanum.put("Name", rs.getString("FirstName"));
 data.add(datanum);

我设法通过执行以下操作过滤了名称,一切正常。

 List<Map<String, String>> filtered_name;
 filtered_name = data.stream()
                .filter(x -> ("string").equalsIgnoreCase(x.get("Name")))
                .collect(Collectors.toList());

但是我现在的解决方案只有在输入完全匹配的情况下才有效。即使只输入一个字符也可以过滤吗?

工作

Entered string: john
output: john xxx
        john yyy

我在寻找什么:

Entered string: j
output: john xxx
        john yyy

【问题讨论】:

  • 将 equalsIgnoreCase 更改为 contains
  • @CôngHải 你的建议导致空指针异常。

标签: android arraylist filter


【解决方案1】:

您是否尝试将过滤器中的谓词更改为这样的:

.filter(x -> x.get("Name").startsWith("string"))

这将过滤所有具有以“字符串”开头的“名称”键值的地图。

【讨论】:

  • 我还没试过。但是我已经可以使用完整的字符串进行过滤。我只想通过输入一个字母来过滤列表。就像我在问题中提到的那样
  • @cantona_7 - 是的,这可能会发生。您可以通过首先放置不能为空(常量)的字符串来反转 .startsWith 中的字符串。或者,如果第一个选项不可行,您也可以进行显式 null 检查并单独处理 null 场景。
  • 嗯,我同意。谢谢你的努力。我以不同的方式解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2017-05-10
  • 2019-08-03
相关资源
最近更新 更多