获取存储在数组中的列表的前n个元素的最快方法是什么?
将此视为场景:
int n = 10;
ArrayList<String> in = new ArrayList<>();
for(int i = 0; i < (n+10); i++)
in.add("foobar");
Run Code Online (Sandbox Code Playgroud)
选项1:
String[] out = new String[n];
for(int i = 0; i< n; i++)
out[i]=in.get(i);
Run Code Online (Sandbox Code Playgroud)
选项2:
String[] out = (String[]) (in.subList(0, n)).toArray();
Run Code Online (Sandbox Code Playgroud)
选项3: 有更快的方法吗?也许使用Java8-streams?
我试图弄清楚如何总结'ArrayList'的所有元素.
我已经尝试过了:
double totalevent = myList.stream().mapToDouble(f -> f).sum();
Run Code Online (Sandbox Code Playgroud)
虽然myList是一个ArrayList<Double>.
没有无用的mapToDouble功能有没有办法做到这一点?
我想尽快创建一个我的键值对的字符串HashMap<String, String> m.
我试过了:
StringBuffer buf = new StringBuffer();
buf.append("[");
for (String key : m.keySet()) {
buf.append(key);
buf.append("=");
buf.append(m.get(key));
buf.append(";");
}
buf.append("]");
Run Code Online (Sandbox Code Playgroud)
用Java8我试过:
m.entrySet().stream()
.map(entry -> entry.getKey() + " = " + entry.getValue())
.collect(Collectors.joining("; " , "[" , "]"));
Run Code Online (Sandbox Code Playgroud)
有更快,更好的代码吗?在地图函数中附加键和值似乎代价很高,不是吗?
我正在尝试将其切ArrayList<String>成两半。
ArrayList<String> in = new ArrayList<>(), out1, out2;
out1 = (ArrayList<String>) in.subList(0,2); //will cause an ClassCastException: List cannot be casted to ArrayList
out2 = (ArrayList<String>) in.subList(2,5); // either here
Run Code Online (Sandbox Code Playgroud)
为什么?视图代表什么,哪个 subList 返回?
实现以下目标的最佳,最便宜,最佳性能的方法是什么:
我有一个CollectionObjects myObject,它提供了一个返回一组整数的方法.我想将集合中的所有项目添加到新集合中.
LinkedList<myObject> ll = new LinkedList<>();
//fill the list bla bla
Set<Integer> result = ll.stream()
.map(f -> f.getTheSet())
.flatMap(Set::stream)
.collect(Collectors.toCollection(TreeSet::new));
System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来获得包含所有对象的所有整数的结果集?我想避免使用flatMap命令"解压缩集合" .相反,我想到的事情.addAll或者最终无关紧要,因为.addAll无论如何解开?
java ×4
java-8 ×4
java-stream ×3
arraylist ×1
arrays ×1
collections ×1
collectors ×1
double ×1
hashmap ×1
performance ×1