Java:1个使用数据结构的具有多个值的键



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

代码-字符串(密钥(

UserCount-整数(值(

用户名-列表(值(

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

代码用户计数用户名

Abc 2 Jack,Mary

Def 1 Steven

Ghi 3詹姆斯,雷,吉姆

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

public class YourObject {
public String code;
public String userName;

// getters and constructor(s)
}

当你说:

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

这意味着在List<YourObject>中,如果两个对象A和B具有相同的代码值X,则需要显示类似";代码X;用户名=[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)
});

最新更新