因此,我正在尝试对列到达时间进行排序,以便最早到达时间。我是java中csv文件的新手,所以很挣扎。
我已经设法读取csv文件并使用数组进行打印,但不确定如何对特定列进行排序
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class readCSV {
public static void main(String[] args) {
String fileName= "csv.csv";
File file= new File(fileName);
// this gives you a 2-dimensional array of strings
List<List<String>> lines = new ArrayList<>();
Scanner inputStream;
try{
inputStream = new Scanner(file);
while(inputStream.hasNext()){
String line= inputStream.next();
String[] values = line.split(",");
// this adds the currently parsed line to the 2-dimensional string array
lines.add(Arrays.asList(values));
//System.out.println(line);
System.out.println(values[0] + ' ' + values[1] + ' ' + values[2] + ' ' + values[3] );
}
inputStream.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
// the following code lets you iterate through the 2-dimensional array
/*int lineNo = 1;
for(List<String> line: lines) {
int columnNo = 1;
for (String value: line) {
System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value);
columnNo++;
}
lineNo++;
}*/
}
}
如果有任何其他改进,如存储csv,打印它等我很乐意改变它
下面是输入的一个例子:
processID arrivalTime burstTime priority
1 0 5 1
2 1 7 2
3 0 2 1
4 2 6 2
5 6 10 3
6 5 4 4
7 6 4 7
8 5 4 8
9 6 6 3
10 6 7 2
我希望下面的代码可以帮助你:) 我做什么,我首先为每一行创建一个对象。之后,我将每个对象与我要比较的那一行的键进行比较。这样您就可以选择要比较的“CSV密钥”。
你可以使用这段代码,但请记住,我把2'TODO'放在那里,如果你不考虑它们,那些可能是空指针异常:)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author runef
*/
public class Test {
public static void main(String[] args) {
new Test();
}
private List<CoolObject> coolObjects = new ArrayList<>();
private String[] linesOfCSV = {"A,B,C,D", "1,2,A,A", "2,1,B,B"};
public Test() {
String[] keys = null;
for (String s : linesOfCSV) {
String[] lineValues = s.split(",");
if (keys == null) {
keys = lineValues;
} else {
Map<String, String> aGoodName = new HashMap<>();
for (int i = 0; i < lineValues.length; i++) {
//TODO: Check if keys[i] exists, check if lineValues[i] exists (if not probs something wrong with CSV)
aGoodName.put(keys[i], lineValues[i]);
}
coolObjects.add(new CoolObject(aGoodName));
}
}
Collections.sort(coolObjects, new SortByKey("A"));
System.out.println("SORTED BY KEY 'A'");
for (CoolObject o : coolObjects) {
for (Map.Entry<String, String> entry : o.getACoolMap().entrySet()) {
System.out.print(entry.getKey() + ": " + entry.getValue() + " ");
}
System.out.print("\n");
}
Collections.sort(coolObjects, new SortByKey("B"));
System.out.println("SORTED BY KEY 'B'");
for (CoolObject o : coolObjects) {
for (Map.Entry<String, String> entry : o.getACoolMap().entrySet()) {
System.out.print(entry.getKey() + ": " + entry.getValue() + " ");
}
System.out.print("\n");
}
}
class CoolObject {
private Map<String, String> aCoolMap;
public CoolObject(Map<String, String> aCoolMap) {
this.aCoolMap = aCoolMap;
}
public Map<String, String> getACoolMap() {
return aCoolMap;
}
}
class SortByKey implements Comparator<CoolObject> {
private String keySorter;
public SortByKey(String keySorter) {
this.keySorter = keySorter;
}
public int compare(CoolObject a, CoolObject b) {
//TODO: CHECK IF KEY EXISTS IN BOTH VALUES! ELSE DO SOMETHING ELSE :) PROBS RETURN -1 SO IT COMES LAST!
return a.getACoolMap().get(this.keySorter).hashCode() - b.getACoolMap().get(this.keySorter).hashCode();
}
}
}
这将排序一列..u可以修改多列..
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
public class Test {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
int lineNumber = 0;
File csvFile = new File("D://new.csv");
BufferedReader br = new BufferedReader(new FileReader(csvFile));
String line = "";
while ((line = br.readLine()) != null) {
String[] arr = line.split(",");
list.add(arr[0]);
lineNumber++;
}
Collections.sort(list);
list.forEach(i -> System.out.println(i));
}
}