我有一个包含代码和用户名的对象列表。我可以用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)
});