Java HashMap只打印一次单独的值

时间:2018-03-20 20:16:38

标签: java hashmap

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

如何才能一次打印相同的值?

6 个答案:

答案 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获取ListSet

// 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::valuesStream::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(您可以选择) HashSetTreeSet)。重复值将被丢弃并仅添加一次。然后,您可以迭代该集合以读取不同的元素。

答案 5 :(得分:-1)

您必须像所有者一样使用密钥,将代码作为值。

最后一位拥有者的值会覆盖最后一位。