Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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_Python - Fatal编程技术网

Java 将列表拆分为组

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",

我有一个字符串列表,我想知道是否有一种简单的方法将大小为n的组中的元素连接起来,如果小于n,最后的元素将自动处理。比如说,

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次:一次用于分区,另一次用于连接。因此,使用番石榴的效率应该较低
  • Guava是Google开发的Java实用程序库,它有一个方法Lists.partition(list,size),您可以使用它将列表分成3个组
  • Java8有String.join(separator,iterable)或Guava
  • 像列表这样的集合通常比基本数组更适合使用
  • 举个例子,假设你不能吃番石榴

    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