Java 将列表拆分为组
我有一个字符串列表,我想知道是否有一种简单的方法将大小为n的组中的元素连接起来,如果小于n,最后的元素将自动处理。比如说,Java 将列表拆分为组,java,python,Java,Python,我有一个字符串列表,我想知道是否有一种简单的方法将大小为n的组中的元素连接起来,如果小于n,最后的元素将自动处理。比如说, String[] strings = {"A", "man", "a", "plan", "a", "canal", "Panama"}; n=3的预期输出为以下字符串列表。记住,我可以自己使用一些令人精疲力尽的迭代来完成这项工作,但我正在寻找一些简单的方法。也许是标准库内置的东西 String[] output = {"A man a", "plan a canal",
String[] strings = {"A", "man", "a", "plan", "a", "canal", "Panama"};
n=3的预期输出为以下字符串列表。记住,我可以自己使用一些令人精疲力尽的迭代来完成这项工作,但我正在寻找一些简单的方法。也许是标准库内置的东西
String[] output = {"A man a", "plan a canal", "Panama"};
作为比较,我想用Python演示任务的简单性。我正在寻找一个同样简单的Java解决方案
[' '.join(strings[i:i+3]) for i in range(0, len(strings), 3)]
我不知道这方面的库,但该方法非常容易编写:
public static String[] group(int groupsize, String separator, String[] strings) {
List<String> output = new ArrayList<>();
StringBuilder sb = new StringBuilder();
int index = 0;
for (String string : strings) {
if (index > 0) {
sb.append(separator);
}
sb.append(string);
index++;
if (index >= groupsize) {
index = 0;
output.add(sb.toString());
sb = new StringBuilder();
}
}
if(index > 0) {
output.add(sb.toString());
}
return output.toArray(new String[output.size()]);
}
公共静态字符串[]组(int-groupsize、字符串分隔符、字符串[]字符串){
列表输出=新的ArrayList();
StringBuilder sb=新的StringBuilder();
int指数=0;
for(字符串:字符串){
如果(索引>0){
附加(分隔符);
}
某人附加(字符串);
索引++;
如果(索引>=groupsize){
指数=0;
add(sb.toString());
sb=新的StringBuilder();
}
}
如果(索引>0){
add(sb.toString());
}
返回output.toArray(新字符串[output.size()]);
}
您也可以使用Guava进行分割和连接,但是对于这种简单的过程,上面的方法似乎很容易理解
此外,Guava还需要在字符串数组上迭代2次:一次用于分区,另一次用于连接。因此,使用番石榴的效率应该较低
public static void main(String[] args) {
String[] strings = { "A", "man", "a", "plan", "a", "canal", "Panama" };
List<String> output = new ArrayList<String>();
for (List<String> partition : partition(Arrays.asList(strings), 3)) {
output.add(String.join(" ", partition));
}
System.out.println(Arrays.toString(output.toArray()));
}
private static <T> List<List<T>> partition(List<T> input, int size) {
List<List<T>> lists = new ArrayList<List<T>>();
for (int i = 0; i < input.size(); i += size) {
lists.add(input.subList(i, Math.min(input.size(), i + size)));
}
return lists;
}
publicstaticvoidmain(字符串[]args){
字符串[]字符串={“A”、“人”、“A”、“计划”、“A”、“运河”、“巴拿马”};
列表输出=新的ArrayList();
for(列表分区:分区(Arrays.asList(strings),3)){
add(String.join(“,partition));
}
System.out.println(Arrays.toString(output.toArray());
}
私有静态列表分区(列表输入,整数大小){
List lists=新建ArrayList();
对于(int i=0;i
将迭代代码放入方法中,然后调用它。这个调用很简单。你知道我在寻找一个内置方法吗?没有内置的方法。写一个函数,它不会很复杂。我如何处理列表中多余的余数?调用方法(如果数组是字符串):group(3,“,strings);这不是我想的,但这是最简单的选择。什么是番石榴?你能解释一下吗?我在Android Studio中使用Java 8,无法识别String.join
。