我经常需要获取对象列表,然后根据对象中包含的值将它们分组为Map。例如。列出用户和国家(地区)分组。
我的代码通常如下所示:
Map<String, List<User>> usersByCountry = new HashMap<String, List<User>>();
for(User user : listOfUsers) {
if(usersByCountry.containsKey(user.getCountry())) {
//Add to existing list
usersByCountry.get(user.getCountry()).add(user);
} else {
//Create new list
List<User> users = new ArrayList<User>(1);
users.add(user);
usersByCountry.put(user.getCountry(), users);
}
}
但是,我不禁会认为这很尴尬,某些专家有更好的方法。到目前为止,我能看到的最接近的是Google Collections的MultiMap。
有没有标准的方法?
谢谢!
在Java
8中,您可以使用Map#computeIfAbsent()
。
Map<String, List<User>> usersByCountry = new HashMap<>();
for (User user : listOfUsers) {
usersByCountry.computeIfAbsent(user.getCountry(), k -> new ArrayList<>()).add(user);
}
或者,请使用流API的是Collectors#groupingBy()
从去List
到Map
直接:
Map<String, List<User>> usersByCountry = listOfUsers.stream().collect(Collectors.groupingBy(User::getCountry));
在Java 7或更低版本中,最好的获得如下:
Map<String, List<User>> usersByCountry = new HashMap<>();
for (User user : listOfUsers) {
List<User> users = usersByCountry.get(user.getCountry());
if (users == null) {
users = new ArrayList<>();
usersByCountry.put(user.getCountry(), users);
}
users.add(user);
}
Commons Collections有一个LazyMap
,但没有参数化。番石榴没有LazyMap
或的种类LazyList
,但是您可以使用Multimap
它,如下面的的答案
添加需要的平台 在给指定平台制作应用之前,你需要将它们添加到你的项目。 > 运行以下命令添加iOS平台: ionic platform add ios > 运行以下命令添加Android平台: ionic platform add android 添加需要的Cordova插件 这个应用将会用到不同的Cordova插件。记住,Cordova插件只能在真实设备上运行。我将在添加他们的时候解释。 > 运
快捷文件.lnk 目标文件 [参数 [图标文件 [图标索引号 [启动选项 [键盘快捷键 [描述]]]]]] 创建一个指向 “目标文件” 的快捷方式 “快捷文件.lnk”,可以带 “参数” 参数。 用于快捷方式的图标为 “图标文件,图标索引号”;要使用默认图标的话把“图标文件” 和 “图标索引号” 设为空字串。 “启动选项” 可以是它们之一: SW_SHOWNORMAL, SW_SHOWMAXIMI
在这里您可以输入新建快捷方式的参数,它将被自解压程序在解压后创建。这个对话框包含下列区域: 创建到哪里 选择您希望创建快捷方式的位置。 源文件名 被压缩的文件名。 目标文件夹 创建快捷方式的文件夹,如果它不存在,它将被自解压文件创建。 快捷方式描述 描述快捷方式的文本。 快捷方式名 是由自解压程序创建的 .lnk (快捷方式)文件的文件名。 快捷方式图标 快捷方式关联的图标文件名称。如果保留空白,
These are the default shortcuts for LiteIDE. Note that you can customize these in "View > Options > LiteApp > Keyboard". Standard New Ctrl+N Open Ctrl+O Save Ctrl+S Close Ctrl+W Full Screen Ctrl+Shift
问题内容: 我陷入了无法添加快捷键的某个步骤,例如:+ 在我的程序中,我搜索了一个星期,但找不到任何答案。 问题答案: 您将需要看一下Java Tutorial ,以更好地了解Key Bindings。 这是一个简单的例子:
新用户:从一月份开始学习Java,现在我正在使用NetBeans,如果我写这个简单的快捷方式,我会得到大量的错误。 所以IDE只是告诉我,我几乎做错了一切。在setOnKeyPressed的线路上,我得到了 我导入了所有内容,并从StackOverflow.com上的另一个问题(可能是有效的)中复制了这段代码。我只想按“esc”,并在root被聚焦的情况下关闭我的primarystage(不管是不