实现逻辑: 1、接受一个2维数组,按一维数组的长度进行排序 2、一维数组中长度最大的2个数组进行全量匹配,后续的数组根据匹配次数均匀匹配 3、匹配完成后,按之前传入的顺序 重新排序 匹配好的数组 public Object[][] Orthogonal(Object[][] data) { List<JSONArray> newData = new LinkedList<>(); ArrayList<ArrayList<JSONObject>> arrayLists = new ArrayList<>(); //将二维数组转化为链表 并加入step int num=0; for (Object[] datum : data) { JSONArray jsonArray = new JSONArray(); for (int j = 0, size1 = datum.length; j < size1; j++) { jsonArray.put(j, new JSONObject() .put("value", datum[j]) .put("num", num) .put("step", 0)); } num++; newData.add(jsonArray); }
if (newData.size() < 2) throw new RuntimeException("二维数组长度必须>=2"); //将linkedList按jsonarray 长度排序 for (int i = 0, size = newData.size() - 1; i < size; i++) { for (int j = i + 1; j <= size; j++) { JSONArray jsonArray = newData.get(i); JSONArray jsonArray1 = newData.get(j); if (jsonArray.length() < jsonArray1.length()) { newData.set(i, jsonArray1); newData.set(j, jsonArray); } } } JSONArray jsonArray = newData.get(0); JSONArray jsonArray1 = newData.get(1); newData.remove(0); newData.remove(0); for (int i = 0, size = jsonArray.length(); i < size; i++) { for (int k = 0, s = jsonArray1.length(); k < s; k++) { ArrayList<JSONObject> arrayList = new ArrayList<>(); arrayList.add(jsonArray.optJSONObject(i)); arrayList.add(minValue(jsonArray1)); if (!newData.isEmpty()) newData.forEach(array -> arrayList.add(minValue(array))); arrayLists.add(arrayList); } } Object[][] objects=new Object[arrayLists.size()][arrayLists.get(0).size()]; for (int i=0,size=arrayLists.size();i<size;i++){ JSONArray arr=new JSONArray(arrayLists.get(i)); //按最开始的数组顺序组合二维数组 for (int k=0,sizes=arr.length();k<sizes;k++){ objects[i][k]=new GetJsonValue().getValue(new GetJsonValue() .getJSONObjectOfKV(arr.toString(),"num",k+""),"value"); } } return objects; } private JSONObject minValue(JSONArray jsonArray) { for (int i = 1, size = jsonArray.length(); i < size; i++) { JSONObject jsonObject = jsonArray.optJSONObject(0); JSONObject jsonObject1 = jsonArray.getJSONObject(i); if (jsonObject.getInt("step") >= jsonObject1.getInt("step")) { jsonArray.put(0, jsonObject1); jsonArray.put(i, jsonObject); } } return jsonArray.getJSONObject(0); }