java - 如何在 Java 中将 List 元素放入 String Array
问题描述
有没有办法将列表元素放入java中的String数组?我使用自定义比较器按值对 Map 进行排序,现在尝试将 key(String) 元素放入数组中。我发现的唯一方法是同时遍历数组和排序列表并以这种方式填充数组,但它只将最后一个元素放入其中。
示例:我的地图没有排序:{a=5, b=2, c=8, d=1}
使用自定义比较器排序后:[c=8, a=5, b=2, d=1]
现在我只需要将键值(c,a
等)放入元组final String[] lettersWithBigValues = new String[n]
中,其中元组n
的长度是。
但是,之后:
for (int i = 0; i < Integer.parseInt(args[1]); i++) {
System.out.println(lettersWithBigValues[i]+",");
}
控制台回馈:
d,d,d,d
假设控制台行参数为 4
这是完整的功能:
public String[] getTopLettersWithValues(final int n){
final String[] lettersWithBigValues = new String[n];
final Map<String, Integer> myMap = new HashMap<>();
int counter = 0;
for (final List<String> record : records) {
if (!myMap.containsKey(record.get(1))) {
myMap.put(record.get(1), counter += Integer.parseInt(record.get(4)));
} else {
myMap.computeIfPresent(record.get(1), (k,v) -> v + Integer.parseInt(record.get(4)));
}
}
System.out.println(myMap);
List<Map.Entry<String, Integer>> sorted = new LinkedList<>(myMap.entrySet());
// Sort list with list.sort(), using a custom Comparator
sorted.sort(valueComparator);
System.out.println(sorted);
for (int i = 0; i < lettersWithBigValues.length; i++) {
for (Map.Entry<String, Integer> values: sorted) {
lettersWithBigValues[i] = values.getKey();
}
}
return lettersWithBigValues;
}
其中 records 是从 csv 文件中读取的数据列表。
这是比较器:
public Comparator<Map.Entry<String, Integer>> valueComparator = (o1, o2) -> {
Integer v1 = o1.getValue();
Integer v2 = o2.getValue();
return v2.compareTo(v1);
};
解决方案
您可以按如下方式获得键数组:
String [] lettersWithBigValues = myMap.entrySet().stream() // entries of your intial map
.sorted(valueComparator) // sorted by your comparator
.map(Map.Entry::getKey) // mapped to only the key e.g. 'd', 'a'
.toArray(String[]::new); // converted to array
推荐阅读
- html - 为什么元素不在 div 中显示,尽管它在 div 中?
- linux - 如何以非交互方式启用/禁用 Linux 无人值守升级
- excel - VBA 用户窗体组合框
- mercurial - 是否可以通过 mercurial 跟踪软链接(ln -s)的文件的内容?
- c# - 值不能为空。参数名称:实体使用 HTTPPOST 方法
- python - strptime - ValueError:时间数据 '02/08/18 10:47:43,907000000' 与格式 '%d/%m/%Y %H:%M:%S,%f' 不匹配
- python - 如何在此代码中使用更少的代码行?(出自著名的米棋寓言)
- android - 通过kotlin创建应用时出现非法参数异常
- angular - Angular 11 中的错误 - 试图从后面获取数据并在屏幕上实现它 - 无法读取未定义的属性“值”
- java - Android 10 打开失败:ENOENT(没有这样的文件或目录)