【问题标题】:Java: 1 key with multiple values using data structureJava:使用数据结构的具有多个值的 1 个键
【发布时间】:2021-12-28 21:59:55
【问题描述】:

我有一个包含代码和用户名的对象列表。我可以使用getCode()getUserName() 获取代码和用户名。如果我必须只显示代码和与每个代码关联的用户名列表,我可以考虑使用 MultiMap。但是如何使用 Java 显示具有不同数据类型的所有三个详细信息(代码、用户数、用户名)?

代码 - 字符串(键)

UserCount - 整数(值)

用户名 - 列表(值)

如何使用Java以如下格式显示?

代码 UserCount 用户名

Abc 2 杰克,玛丽

Def 1 史蒂文

Ghi 3 詹姆斯、雷、吉姆

【问题讨论】:

  • 为什么不是 Map> ?然后,您可以使用代码迭代并打印数组有多少元素。 (地图的关键是您的代码)

标签: java arrays hashmap hashset multimap


【解决方案1】:

如果我理解,你有一个 List<YourObject> 其中YourObject 是类:

public class YourObject {
    public String code;
    public String userName;
    
    // getters and constructor(s)
}

当你说:

我必须只显示代码和与每个代码关联的用户名列表

这意味着在您的List<YourObject> 中,如果两个对象 A 和 B 具有相同的代码值 X,您希望显示类似“代码 X ; usernames = [A.getUserName(), B.getUserName()] “?

但您还想添加一个userCount 属性,它是用户名列表的大小(在我上面的示例中:2)。

我认为您可以创建一个实用方法,将您的List<YourObject> 作为参数并返回一个Map<String,List<String>>,其中键字符串是代码,字符串列表是用户名。

类似:(对不起流版本,我懒得写更多行):

public static Map<String,List<String>> process(List<YourObject>  list) {
    return list.stream().collect(Collectors.toMap(YourObject::getCode, x -> list.stream().filter(e -> x.getCode().equals(e.getCode())).map(YourObject::getUserName).collect(Collectors.toList()), (x,y) -> x));
}

你想要的显示:

process(yourList).forEach((k,v) -> {
    System.out.println("Code : " + k + " | userCount :" + v.size() + " | Usernames =" + v)
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2019-09-30
    • 2015-04-07
    • 1970-01-01
    相关资源
    最近更新 更多