【发布时间】:2017-06-22 06:19:42
【问题描述】:
据我了解,以下代码应该打印true,因为Stream 和Iterator 都指向第一个元素。
但是,当我运行以下代码时,它正在打印false:
final HashMap<String, String> map = new HashMap<>();
map.put("A", "B");
final Set<Map.Entry<String, String>> set = Collections.unmodifiableMap(map).entrySet();
Map.Entry<String, String> entry1 = set.iterator().next();
Map.Entry<String, String> entry2 = set.stream().findFirst().get();
System.out.println(entry1 == entry2);
造成这种不同行为的原因可能是什么?
【问题讨论】:
-
不,不应该,因为 HashMap 的 entrySet 没有排序。
-
@JBNizet-- 同意,但先生,我的地图中只有 1 个元素。
-
地图也不保证它们不会动态创建新的 Map.Entry 实例。不要用 == 比较对象。使用 equals()。
-
我同意@JBNizet。使用“entry1.equals(entry2)”
-
@Eran-- 你也是英语专家吗...:D 非常好的编辑...(Y)
标签: java java-8 iterator java-stream entryset