我有一个arrayList的arrayList, 例如:
mainList = [[2,1],[3,1],[5,1],[6,2],[11,2],[7,2],[9,3],[10,3],[11,3],....,[n,m]]
,
其中n和m可以是任何值。
现在我想根据innerList第二元组值对元素进行分组,并将所有组放在不同的arrayList中,即:
newList1 =[2,3,5], newList2=[6,11,7]
和其他群组一样,我找不到任何解决方案,我是java新手,请提出一些建议。
public class CsvParser {
public static void main(String[] args) {
try {
FileReader fr = new FileReader((args.length > 0) ? args[0] : "data.csv");
Map<String, List<String>> values = parseCsv(fr, " ", true);
System.out.println(values);
} catch (IOException e) {
e.printStackTrace();
}
}
public static Map<String, List<String>> parseCsv(Reader reader, String separator, boolean hasHeader) throws IOException {
Map<String, List<String>> values = new LinkedHashMap<String, List<String>>();
List<String> columnNames = new LinkedList<String>();
BufferedReader br = null;
br = new BufferedReader(reader);
String line;
int numLines = 0;
while ((line = br.readLine()) != null) {
if (StringUtils.isNotBlank(line)) {
if (!line.startsWith("#")) {
String[] tokens = line.split(separator);
if (tokens != null) {
for (int i = 0; i < tokens.length; ++i) {
if (numLines == 0) {
columnNames.add(hasHeader ? tokens[i] : ("row_"+i));
} else {
List<String> column = values.get(columnNames.get(i));
if (column == null) {
column = new LinkedList<String>();
}
column.add(tokens[i]);
values.put(columnNames.get(i), column);
}
}
}
++numLines;
}
}
}
return values;
}
}
答案 0 :(得分:1)
这样的东西就足够了。我确信它可以在我赶紧写完之后清理干净。
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
try {
List<List<Integer>> outerList = new ArrayList<List<Integer>>();
outerList.add(new ArrayList<Integer>(asList(11,2)));
outerList.add(new ArrayList<Integer>(asList(2,1)));
outerList.add(new ArrayList<Integer>(asList(11,3)));
outerList.add(new ArrayList<Integer>(asList(6,2)));
outerList.add(new ArrayList<Integer>(asList(7,2)));
outerList.add(new ArrayList<Integer>(asList(9,3)));
outerList.add(new ArrayList<Integer>(asList(3,1)));
outerList.add(new ArrayList<Integer>(asList(5,1)));
outerList.add(new ArrayList<Integer>(asList(10,3)));
if(outerList.size() == 0) return;
Collections.sort(outerList, new CustomComparator());
System.out.println(outerList);
List<List<Integer>> newOuterList = new ArrayList<List<Integer>>();
int i = 0;
int value = outerList.get(0).get(1);
while(i < outerList.size()) {
List<Integer> newInnerList = new ArrayList<Integer>();
while(i < outerList.size()) {
if(outerList.get(i).get(1) == value) {
newInnerList.add(outerList.get(i).get(0));
i++;
} else {
value = outerList.get(i).get(1);
break;
}
}
newOuterList.add(newInnerList);
}
System.out.println(newOuterList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class CustomComparator implements Comparator<List<Integer>> {
@Override
public int compare(List<Integer> o1, List<Integer> o2) {
return o1.get(1).compareTo(o2.get(1));
}
}