hashmap键包括注册号和hashmap值包括所有者名称。这是我的代码:
public static void main(String[] args) {
HashMap<String, String> data = new HashMap<>();
Scanner reader = new Scanner(System.in);
data.put("AAA-111", "Jack");
data.put("BBB-222", "Matt");
data.put("CCC-333", "Jack");
for (HashMap.Entry<String, String> entry: data.entrySet()) {
System.out.println(entry.getValue());
//data.values().remove(entry.getValue());
}
}
目前的输出:
Jack
Matt
Jack
问题在于我不想两次打印同一个主人。我的目标是:
Jack
Matt
如何才能一次打印相同的值?
答案 0 :(得分:8)
您可以像这样创建Set
:
Set<String> names = new HashSet<>(data.values());
<强>输出强>
[Matt, Jack]
答案 1 :(得分:2)
最简单的方法是使用Streams:
data.values().stream().distinct().forEach(System.out::println);
答案 2 :(得分:2)
<强> 1 即可。使用Streams
获取List
或Set
:
// 1 list
List<String> list = data.values().stream()
.distinct().collect(Collectors.toList()); //[Jack, Matt]
// 2 set
Set<String> set = data.values().stream()
.distinct().collect(Collectors.toSet()); //[Matt, Jack]
<强> 2 即可。没有Streams
来获取基本或已排序的Set
:
// 1 simple Set
Set<String> set = new HashSet<>(data.values()); //[Matt, Jack]
// 2 sorted Set
Set<String> set = new TreeSet<>(data.values()); //[Jack, Matt]
答案 3 :(得分:1)
使用Map::values
和Stream::distinct
:
data.values().stream().distinct().forEach(System.out::println);
答案 4 :(得分:1)
HashMap使用值映射唯一键,值可能重复。 put()
方法接受两个参数,第一个是Key,第二个是Value。
data.put("AAA-111", "Jack");
data.put("BBB-222", "Matt");
data.put("CCC-333", "Jack");
现在data.put("BBB-222", "Jill");
将取代&#34;马特&#34;和&#34; BBB-222&#34;将与&#34; Jill&#34;映射。
要拥有可以使用Set
的唯一元素并添加元素,它不会添加重复元素。如果您正在获取HashMap,那么您可以使用其他答案中提到的Stream API来提取不同的值,或者您可以迭代HashMap values()
并继续将每个值添加到Set
(您可以选择) HashSet
,TreeSet
)。重复值将被丢弃并仅添加一次。然后,您可以迭代该集合以读取不同的元素。
答案 5 :(得分:-1)
您必须像所有者一样使用密钥,将代码作为值。
最后一位拥有者的值会覆盖最后一位。