因此,我尝试对到达时间进行排序,以便最早的到达时间排在第一位。我对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,打印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
答案 0 :(得分:0)
我希望下面的这段代码对您有所帮助:)
我要做的是,我首先为每一行创建一个对象。
之后,我将每个对象与该行的键进行比较。
这样,您就可以选择要比较的“ 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();
}
}
}
答案 1 :(得分:0)
这将对一列进行排序。.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));
}
}