所以,我有一个以下列方式编写的文件:
X - Y
A - B
X - Z
A - C
X - L
A - N
基本上,两个实体之间存在关系。
我想将其映射到地图上,以便可以将一个唯一键映射到值列表中。
我想要的是这样的: {X = [Y,Z,L]},{A = [B,C,N]}等......
我认为存储它们的最佳方式是Map<String, List<String>>
。
我记住了以下算法:
Files.readAllLines()
读取传入的文件,将这些行存储为List<String>
。String.split()
或StringTokenizer
将行标记为List<List<String>>
此后我该怎么办?我只需要一个算法,请注意,这不是家庭作业。我正在为自己编写一个简单的Java应用程序,用于对这些文件进行标记,并将它们导出为CSV格式。
提前致谢!
答案 0 :(得分:5)
我的第一个想法是这样做:
List<String> lines = new ArrayList<>(Arrays.asList("X - Y", "A - B", "X - Z", "A - C", "X - L", "A - N"));
Map<String, List<String>> pairs = new HashMap<>();
for (String line : lines) {
String[] pair = line.split("-");
String key = pair[0].trim();
String val = pair[1].trim();
List<String> valueFromMap = pairs.get(key);
if(valueFromMap == null) {
valueFromMap = new ArrayList<>();
}
valueFromMap.add(val);
pairs.put(key, valueFromMap);
}
System.out.println(pairs.toString());
答案 1 :(得分:2)
以下是如何在Java 8中执行此操作:
System.out.println(
Files.readAllLines(file).stream()
.map(line -> line.split("-"))
.collect(
groupingBy(
array -> array[0].trim(),
mapping(array -> array[1].trim(),
toList())
)
)
);
<强>输出:强>
{A=[B, C, N], X=[Y, Z, L]}
答案 2 :(得分:1)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class prova {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Map<String,ArrayList<String>> mappa= new HashMap<String,ArrayList<String>>();
File dir = new File(".");
File fin = new File(dir.getCanonicalPath() + File.separator + "file.txt");
FileInputStream fis = new FileInputStream(fin);
//Construct BufferedReader from InputStreamReader
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
while ((line = br.readLine()) != null) {
String[] splitted = line.split(" - ");
String key = splitted[0];
String value = splitted[1];
ArrayList<String> v;
v = mappa.get(key);
if (v==null)
v = new ArrayList<String>();
v.add(value);
mappa.put(key, v);
}
System.out.println(mappa.toString());
br.close();
}
}
我的输出是:{A = [B,C,N],X = [Y,Z,L]}
答案 3 :(得分:1)
你可以试试这个:
public static void main(String[] args) throws IOException {
Map<String,List<String>> graphlist = new TreeMap<>();
String path = "/Users/addodennis/Desktop/Projects/HotelReservation/src/Data/Dlist";
String str;
try(BufferedReader read = new BufferedReader(new FileReader(path));) {
while ((str = read.readLine()) != null){
String[] list = str.split(" - ");
String k = list[0].trim();
String v1 = list[1].trim();
List<String> ad = graphlist.get(k);
if (ad == null){
ad = new ArrayList<>();
}
ad.add(v1);
graphlist.put(k,ad);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
代表A
{A = [B,C,N]}