【问题标题】:Java: find empty key in map:Java:在地图中找到空键:
【发布时间】:2014-12-11 21:51:47
【问题描述】:

我不知道为什么不适合我。我在地图中有一个空键,但我无法抓住它们。

Map<String, Long> map = new TreeMap<>();

//put data

map.entrySet().stream().forEach(e -> {
    if (e.getKey().equals("") || e.getKey().equals(" ") || e.getKey() == "" || e.getKey() == " ") {
        map.remove(e.getKey(), e.getValue());
    }
});

编辑: 我做了一个价值测试:

     map.entrySet().stream() .forEach(e -> {
            if (e.getValue() == 133835) {
            System.out.println("key empty: " + e.getKey().isEmpty());
            System.out.println("key: >" + e.getKey() + "<");
            System.out.println("val: " + e.getValue());
        }
    });

    map = map.entrySet().stream().filter(
            p -> !"".equals(p.getKey().trim())).
            collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));


map.entrySet().stream() .forEach(e -> {
    if (e.getValue() == 133835) {

        System.out.println("key empty: " + e.getKey().isEmpty());
        System.out.println("key: >" + e.getKey() + "<");
        System.out.println("val: " + e.getValue());
    }
});

结果是:

key empty: false
key: >‏<
val: 133835
key empty: false
key: >‏<
val: 133835

我觉得这把钥匙很牛)

【问题讨论】:

  • "我在地图中有一个空键,但我可以抓住它们。" - 这句话毫无意义。你想要做什么,正在发生什么而不是你想要做什么?
  • 您能具体说明问题所在吗?什么不适合你?你期望发生什么?你是怎么放数据的?
  • 从编辑来看,他似乎无法在他的地图中捕捉/找到空字符串的键。
  • 对不起这个错误,我把它改成了“不能”
  • 显然不是空的。弄清楚里面有什么——钥匙是从哪里来的。

标签: java collections map


【解决方案1】:

尝试使用 e.getKey().trim().isEmpty()

【讨论】:

  • 我现在只有 System.out.println("found") 这不是问题
  • key.trim().isEmpty() 听起来像是检查这个的正确方法。在您的语言环境中可能有一些外来字符是非打印的,而 trim() 不会删除。
  • 还是一样的结果:key empty: false
【解决方案2】:

首先,我通常建议修剪而不是检查“” m(一个空格)和“”(空字符串)。其次可能是这种情况(一个有多个空格的键)。

  "".equals(e.getKey().trim())

编辑示例: Map map = new TreeMap();

        map.put("",  1L);
        map.put(" ", 2L);
        map.put("3", 3L);

        map.entrySet().stream().forEach(e -> {
            System.out.println("key empty: " + e.getKey().isEmpty());
            System.out.println("key: >" + e.getKey() + "<");
            System.out.println("val: " + e.getValue());
        });
        map = map.entrySet().stream().filter(
                p -> !"".equals(p.getKey().trim())).
                collect(Collectors.toMap(Entry::getKey, Entry::getValue));        

        map.entrySet().stream().forEach(e -> {
            System.out.println("key empty: " + e.getKey().isEmpty());
            System.out.println("key: >" + e.getKey() + "<");
            System.out.println("val: " + e.getValue());
        });

输出是:

key empty: true
key: ><
val: 1
key empty: false
key: > <
val: 2
key empty: false
key: >3<
val: 3
AFTER REMOVAL
key empty: false
key: >3<
val: 3

【讨论】:

  • 这如何回答这个问题?
  • deosn 没有回答,但可能是朝着正确方向前进的线索。对我来说,他的一个空键被定义为一个匹配一个空白或“”的字符串。所以也许一个带有两个 bnalks 的字符串也被认为是空的,并且不会被他的代码 fdund。
  • 试过过滤器?,例如:m.entrySet().stream() .filter(p -&gt; !"".equals(p.getKey().trim())) .collect(toMap(Entry::getKey, Entry::getValue));
  • 我怎样才能使这个方法 toMap() ?
  • sry: Collectors.toMap(免责声明:手头没有 java8 编译器)。
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 2018-05-05
  • 1970-01-01
  • 2023-03-31
  • 2018-06-21
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多