Есть ли более элегантные способы обработки списков в Java? (Python VS Java)

Мне нравится, как я могу обрабатывать списки в Python. Любое рекурсивное решение выглядит простым и понятным. Например, типичная проблема получения всех перестановок элементов в списке в Python выглядит так:

def permutation_recursion(numbers,sol):
    if not numbers:
        print "this is a permutation", sol
    for i in range(len(numbers)):
        permutation_recursion(numbers[:i] + numbers[i+1:], sol + [numbers[i]])

def get_permutations(numbers):
    permutation_recursion(numbers,list())

if __name__ == "__main__":
    get_permutations([1,2,3])

Мне нравится способ простого получения новых экземпляров измененных списков, выполняя такие действия, как Например, типичная проблема получения всех перестановок элементов в списке в Python ...

Мне нравится, как я могу обрабатывать списки в Python. Любое рекурсивное решение выглядит простым и понятным. Например, типичная проблема получения всех перестановок элементов в списке в Python выглядит так:

def permutation_recursion(numbers,sol):
    if not numbers:
        print "this is a permutation", sol
    for i in range(len(numbers)):
        permutation_recursion(numbers[:i] + numbers[i+1:], sol + [numbers[i]])

def get_permutations(numbers):
    permutation_recursion(numbers,list())

if __name__ == "__main__":
    get_permutations([1,2,3])

Мне нравится способ простого получения новых экземпляров измененных списков, выполняя такие действия, как Например, типичная проблема получения всех перестановок элементов в списке в Python ...

Мне нравится, как я могу обрабатывать списки в Python. Любое рекурсивное решение выглядит простым и понятным. Например, типичная проблема получения всех перестановок элементов в списке в Python выглядит так:

def permutation_recursion(numbers,sol):
    if not numbers:
        print "this is a permutation", sol
    for i in range(len(numbers)):
        permutation_recursion(numbers[:i] + numbers[i+1:], sol + [numbers[i]])

def get_permutations(numbers):
    permutation_recursion(numbers,list())

if __name__ == "__main__":
    get_permutations([1,2,3])

Мне нравится способ простого получения новых экземпляров измененных списков, выполняя такие действия, как числа [: i] + числа [i + 1:] или sol + [числа [i]]

Если я попытаюсь точно так же кодировать на Java, это будет выглядеть так:

import java.util.ArrayList;
import java.util.Arrays;

class rec {
    static void permutation_recursion(ArrayList numbers, ArrayList sol) {
       if (numbers.size() == 0)
            System.out.println("permutation="+Arrays.toString(sol.toArray()));
       for(int i=0;i remaining = new ArrayList(numbers);
             remaining.remove(i);

             ArrayList sol_rec = new ArrayList(sol);
             sol_rec.add(n);

             permutation_recursion(remaining,sol_rec);
       }
    }
    static void get_permutation(ArrayList numbers) {
        permutation_recursion(numbers,new ArrayList());
    }
    public static void main(String args[]) {
        Integer[] numbers = {1,2,3};
        get_permutation(new ArrayList(Arrays.asList(numbers)));
    }
}

Чтобы создать такую ​​же рекурсию, мне нужно сделать:

ArrayList remaining = new ArrayList(numbers);
remaining.remove(i);

ArrayList sol_rec = new ArrayList(sol);
sol_rec.add(n);

Что довольно некрасиво, и становится хуже для более сложных решений. Как и в в этом примере

Итак, мой вопрос ... есть ли в Java API какие-либо встроенные операторы или вспомогательные функции, которые сделали бы это решение более «питоническим»?

7
задан Community 23 May 2017 в 11:46
поделиться