我正在读取一个具有两列的txt文件,其中每个元素都是一个整数。我想将第一列中的元素用作键,并将第二列中的元素用作我的值。
我只共享我数据集的一小部分。
0 1
0 2
0 3
0 4
1 2
1 3
1 0
Scanner scanner = new Scanner(new FileReader(DATADIR+"data.txt"));
TreeMap<Integer, List<Integer>> myMap = new TreeMap<Integer, List<Integer>>();
while (scanner.hasNextLine()) {
String[] line= scanner.nextLine().split("\t");
}
现在,我需要的是一个结构,当我调用0时,该结构应该得到<1,2,3,4>。
答案 0 :(得分:1)
您应该检查地图中是否存在该密钥,并进行相应添加。 示例代码:
messageout="The rain in Spain stays mainly in the plains"
summaryout="This is a test record"
alertnameout="Test Alert"
curl -v -silent request POST "URL.com?\
summary=`echo $summaryout | sed -e 's/ /%20/g'`&\
alertname=`echo $alertnameout | sed -e 's/ /%20/g'`&\
message=`echo $messageout | sed -e 's/ /%20/g'`"
答案 1 :(得分:1)
您可以尝试以下方法:
TreeMap<Integer, List<Integer>> myMap = new TreeMap<Integer, List<Integer>>();
while (scanner.hasNextLine()) {
String[] line = scanner.nextLine().split("\\s+");
myMap.computeIfAbsent(Integer.valueOf(line[0]), k -> new ArrayList<>()).add(Integer.valueOf(line[1]));
}
System.out.println(myMap );
答案 2 :(得分:1)
我根本不会使用Scanner
来读取文件。相反,请使用一种现代的流式传输文件内容的方法,然后根据需要处理每一行。
在我的环境中,用"\t"
分割文件是行不通的,这就是为什么我在期望值之间用任意数量的空格分割了String
的原因。{1}} >
请参见以下最小示例:
public static void main(String[] args) {
Path filePath = Paths.get(DATADIR).resolve(Paths.get("data.txt"));
// define the map
Map<Integer, List<Integer>> map = new TreeMap<>();
try {
// stream all the lines read from the file
Files.lines(filePath).forEach(line -> {
// split each line by an arbitrary amount of whitespaces
String[] columnValues = line.split("\\s+");
// parse the values to int
int key = Integer.parseInt(columnValues[0]);
int value = Integer.parseInt(columnValues[1]);
// and put them into the map,
// either as new key-value pair or as new value to an existing key
map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
});
} catch (IOException e) {
e.printStackTrace();
}
// print the map content
map.forEach((key, value) -> System.out.println(key + " : " + value));
}
您将不得不同时使用以下导入:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;