1

在执行以下操作时:

ImmutableMultimap<Something, Something> map;
//Say I insert "Hello", "5" to the map
System.out.println(map.keys().toString());

所以[Hello]当我这样做时

if(map.keys().toString().equals("Hello"))

它总是失败。我不想做

if(map.keys().toString.equals("[Hello]")

有没有办法在没有方括号的情况下显示结果?

4

4 回答 4

18

您永远不应该将toString()其用于任何严重的事情!此方法适用于检查正在发生的事情(例如在调试器中)的人员,仅用于其他目的。

此外,其中没有括号。map.keys()是一个集合,它的toString()方法就像集合一样工作。您最好通过测试map.keys.size() == 1然后检查唯一元素来替换您的测试。

于 2012-08-09T19:45:16.480 回答
5
map.keys().toString().replaceAll("[\\[\\],]","")

返回字符串,删除所有方括号和逗号

于 2012-08-09T19:45:08.983 回答
2

如果您像在测试中那样检查相等性,那么您实际上应该这样做:

System.out.println(ImmutableMultiSet.of("Hello").equals(map.keys()))

由于 ImmutableMultiSet 具有 .equals 的正确实现,因此应该处理除 map 为空之外的所有可能情况。


如果您想要一个包含其中所有元素的字符串,请改用 Joiner:

System.out.println(Joiner.on(",").join(map.keys()))

在 Joiner 上有更多的选项可以用于格式化集合的各种方式。

于 2012-08-09T22:28:37.230 回答
1

您可以替换字符串中的括号,或者您可以遍历键集并单独打印每个组件。

 ImmutableMultiset<Something> keys = map.keys();
 for(Something key : keys){
    System.out.print(key);
 }

对于您想要的条件

if(map.keys().contains("Hello"))
于 2012-08-09T19:38:24.677 回答