Java 中是否有更优雅的处理列表的方法? (Python VS Java)

2024-02-17

我确实喜欢在 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])

我确实喜欢通过执行以下操作来简单地获取修改列表的新实例的方式numbers[:i] + numbers[i+1:] or sol + [numbers[i]]

如果我尝试用 Java 编写完全相同的代码,它看起来像:

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)));
    }
}

要创建相同的递归,我需要执行以下操作:

ArrayList<Integer> remaining = new ArrayList<Integer>(numbers);
remaining.remove(i);

ArrayList<Integer> sol_rec = new ArrayList<Integer>(sol);
sol_rec.add(n);

这是相当难看的,而且对于更复杂的解决方案来说,情况会变得更糟。像这个例子 https://stackoverflow.com/questions/4632322/finding-all-possible-combinations-of-numbers-to-reach-a-given-sum/4633515#4633515

所以我的问题是......Java API 中是否有任何内置运算符或辅助函数可以使这个解决方案更加“Pythonic”?


No.

但这就是马丁·奥德斯基创建的原因Scala http://www.scala-lang.org。他甚至表示,他对 Scala 的目标之一是让它成为 Java 世界的 Python。 Scala 编译为 Java 字节码,并可以轻松地与 Java 编译的类进行互操作。

如果这不是一个选择,你可以看看公共收藏图书馆 http://commons.apache.org/collections/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中是否有更优雅的处理列表的方法? (Python VS Java) 的相关文章

随机推荐