我想从一个方法(填充这些数组)返回两个String数组。两个阵列的大小彼此不同。我该怎么办?
String[] namesOfColumnsFound = new String[45];
String[] namesOfColumnsNotFound = new String[25];
编辑:我只需要传递数据..不需要传递任何行为
答案 0 :(得分:6)
创建一个包含两个数组而不是某个集合组合的对象。为什么?
List<Array<...>>
e.g。
public class ReturnType {
private Array<String> first = ...
private Array<String> second = ...
public boolean isValid() { ... }
public void doSomethingCleverWithReturnValues() { ... }
}
public ReturnType giveMeTwoArrays() {
...
return new ReturnType(...)
}
真的真的很容易做一些简单的事情(例如返回一个元组或一个集合组合),但与上面做的相比,重构的痛苦是相当大的(我说的是刚刚犯了这个错误的经验刚才这个!那就是使用Scala - 类型推断让生活更简单,而且还是一种痛苦)
答案 1 :(得分:3)
或者创建一个包含两个数组的简单包装器。
示例:
class ArrayHelper{
private String[] strArr1;
private String[] strArr2;
... [constructor that sets both arrays and getters to access them]
};
答案 2 :(得分:2)
您可以返回包含两个元素的列表。 list [0]将是你的第一个字符串数组,list [1]将是第二个。
答案 3 :(得分:2)
这是另一种做法
return (new Object[] { obj1 ,obj2 });
return Arrays.asList(obj1,obj2);
return(new Object [] {obj1,obj2});
回报大小
class xx
{
public static void main (String[] args)
{
...
Object[] receiver = m();
System.out.println(receiver.length); // size is 2
}
public static Object[] m()
{
String m ="suresh";
return (new Object[] { m ,new ArrayList().add("PEPE") });
}
答案 4 :(得分:1)
您可以返回两个数组的数组(即使它们的长度不同)。数组列表也可以使用。 “最干净”的解决方案是使用某种类型的Tuple(有www.javatuples.org,但服务器现在似乎已经关闭了)
<强> [编辑] 强>
有几种方法可以制作数组数组,例如
public int[][] method() {
int[] array1 = new int[]{1,2,3,4};
int[] array2 = new int[]{10,20,30};
int[][] result = new int[]{array1, array2};
return result;
}
答案 5 :(得分:1)
这是我的两分钱:我避免从方法返回语言对象(如String,int,String [],arraylist,map等)。我相信我所写的内容应该是商业术语以便于阅读,更重要的是,将代码与手头的问题联系起来。
我将如何编写它(测试代码):
ColumnAnalyzer ca = new ColumnAnalyzer();
ca.analyze();
System.out.println(ca.getNamesOfColumnsFound().length) ;
System.out.println(ca.getNamesOfColumnsNotFound().length) ;
当然应更改名称ColumnAnalyzer
和方法analyze()
以反映业务系统术语。
答案 6 :(得分:0)
你也可以返回一个包含两个数组的Object,甚至可能还有一些逻辑如何使用数组。
很简单的例子:
public class Result {
public String[] array1;
public String[] array2;
}
Result result = new Result();
result.array1 = xyz;
...
最好将有关array1和2的一些逻辑放入Object:
public class Result {
private String[] array1;
private String[] array2;
public Result(String[] array1, String[] array2) {
this.array1 = array1;
this.array2 = array2;
}
// now some business logic like this, or just return the arrays with getters
public int getArray1Size() {
}
}
答案 7 :(得分:0)
虽然这并没有完全解决你使用两个数组的问题,但这是我将如何处理它
public Map<String,Boolean> analyzeColumns(SomeStructure struct) {
Map<String,Boolean> columnName2found = new HashMap<String,Boolean>();
for(PotentialColumn pc : struct) {
String name = pc.getName();
boolean found = pc.isFound();
columnName2found.put(name,found);
}
return columnName2Found;
}
// in action
Map<String,Boolean> columnName2found = anaylzeColumns(struct);
for(Map.Entry<String,Boolean> entry : columnName2found.entrySet()) {
if(entry.getValue()) handleFound(entry.getKey());
else handleNotFound(entry.getKey());
}
答案 8 :(得分:0)
您还可以使用更“通用”的包装器对象:
public class Tuple<A, B>{
private A a;
private B b;
public Tuple(A a, B b) {
this.a = a;
this.b = b;
}
public A getFirst(){return a;}
public B getSecond(){return b;}
}