Podobał mi się sposób, w jaki mogę traktować listy w Pythonie. Wykonuje dowolne rozwiązanie rekursji, aby wyglądać łatwo i czysto. Na przykład typowy problem uzyskania wszystkich permutacji elementów na liście, w Pythonie wygląda następująco:Czy istnieją bardziej eleganckie sposoby obsługi list w Javie? (Python VS Java)
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])
zrobić jak sposób mogę prosty uzyskać nowe instancje zmodyfikowanych listach wykonując takie rzeczy jak numbers[:i] + numbers[i+1:]
lub sol + [numbers[i]]
Jeśli staram się dokładnie taki sam kod w Javie, to wygląda:
import java.util.ArrayList;
import java.util.Arrays;
class rec {
static void permutation_recursion(ArrayList<Integer> numbers, ArrayList<Integer> sol) {
if (numbers.size() == 0)
System.out.println("permutation="+Arrays.toString(sol.toArray()));
for(int i=0;i<numbers.size();i++) {
int n = numbers.get(i);
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);
ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);
permutation_recursion(remaining,sol_rec);
}
}
static void get_permutation(ArrayList<Integer> numbers) {
permutation_recursion(numbers,new ArrayList<Integer>());
}
public static void main(String args[]) {
Integer[] numbers = {1,2,3};
get_permutation(new ArrayList<Integer>(Arrays.asList(numbers)));
}
}
aby utworzyć taką samą rekursji należy zrobić:
ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);
ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);
Co jest dość brzydkie i pogarsza się w przypadku bardziej złożonych rozwiązań. Podobnie jak w this example
Moje pytanie brzmi: czy są jakieś wbudowane funkcje operatorów lub pomocników w API Javy, które sprawiłyby, że to rozwiązanie byłoby bardziej "Pythoniczne"?
Zawsze jest Jython :) – Seth
"Więcej" w tytule jest zbędne - powinno być pytanie, czy istnieje jakikolwiek sposób na pracę z listami w Javie. A afaik, nie - nie ma. –