Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从多重映射中获取枚举值_Java_Json_Enums_Guava_Multimap - Fatal编程技术网

Java 如何从多重映射中获取枚举值

Java 如何从多重映射中获取枚举值,java,json,enums,guava,multimap,Java,Json,Enums,Guava,Multimap,这是我的enum: 公共枚举员工队伍{ 佣工(“佣工”), 主持人(“主持人”), 管理人(“管理人”), 开发商(“开发商”), 业主(“业主”); 私有字符串名称; StaffRanks(字符串名称){ 这个.setName(name); } 公共字符串getName(){ 返回名称; } 公共void集合名(字符串名){ this.name=名称; } } 这就是我创建多重映射的方式: 公共静态多映射staffMembers; public static void fetchplayer

这是我的
enum

公共枚举员工队伍{
佣工(“佣工”),
主持人(“主持人”),
管理人(“管理人”),
开发商(“开发商”),
业主(“业主”);
私有字符串名称;
StaffRanks(字符串名称){
这个.setName(name);
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
}
这就是我创建多重映射的方式:

公共静态多映射staffMembers;
public static void fetchplayerrorks(){
JsonParser=新的JsonParser();
试一试{
Object obj=parser.parse(新文件读取器(“.\\Data\\staff\u list.json”);
JsonObject statfflist=(JsonObject)obj;
类型listType=新类型令牌(){
}.getType();
staffMembers=ArrayListMultimap.create();
for(StaffRanks-rank:StaffRanks.values()){
put(new Gson().fromJson(staffList.get(rank.getName()),listType),rank);
}
}捕获(例外e){
e、 printStackTrace();
}
}
这就是我想使用它的方式:

int索引=39550;
用于(弦乐演奏者:所有员工姓名){
联机状态=”@red@Offline";
if(onlineStaff.contains(PlayerHandler.getPlayer(player))){
联机状态=”@gre@Online";
}
国际单项体育联合会(staffMembers.containsKey(球员)){
playerClient.getPA().sendFrame126(“[”+staffMembers.get(player.getName()+“]@cya@”+其他格式playerName(player)+:”,索引);
}
playerClient.getPA().sendFrame126(联机状态,索引-1);
指数+=2;
}
现在,问题是:如何从
多重映射中的枚举中获取名称

这是我试过的。但是,它不起作用

staffMembers.get(player.getName())
以下是
Staff\u list.json
文件的外观:

{
“所有者”:[“查克”],
“开发商”:[‘暴君’、‘斯坦’],
“服务器管理器”:[“逻辑”],
“员工经理”:[“工作台压力”、“工作台压力2”],
“社区管理者”:[“劈开”],
“管理员”:['zeven','reavers','redaeran','stuart'],
“主持人”:['searwen'、'potentials'、'maud'、'lickylicky'],
“助手”:['megafun12','rhysj','vaping','punch']
}

因为
staffMembers
被定义为
Multimap
,这意味着您应该将其理解为
Map
,在这种情况下具有闪亮的番石榴色界面(即将键映射到一组值)。因此,在你的情况下,你实际上要做的是:

Collection<StaffRanks> staffRanksForPlayer = staffMembers.get(player);
staffRanksForPlayer.getName(); // BOOM!

还有一件事:通常,您希望指定您正在使用的特定
Multimap
接口:或者。

员工列表.json
条目是什么样子的?那么
播放器
字符串文字是什么样子的呢?这应该是诀窍…@tmarwen添加了json文件,已经谢谢了:)您可以补充说明您的示例中不起作用的部分吗?抛出的错误是什么?在哪一部分?我几乎看不出它能编译。
List<String> staffRanksNamesForPlayer = staffMembers.get(player).stream()
    .map(StaffRanks::getName)
    .collect(Collectors.toList());

// use list's `toString()` in your code to print its contents
playerClient.getPA().sendFrame126("[" + staffRanksNamesForPlayer.toString()
     + "]@cya@" + Misc.formatPlayerName(player) + ": ", index);