गुण वर्ग HashTable, का एक उपवर्ग है जो बदले में मानचित्र को लागू करता है।
आप हमेशा की तरह इसे लोड के साथ:
Properties properties = new Properties();
try {
properties.load(new FileInputStream("filename.properties"));
} catch (IOException e) {
}
संपादित करें: ठीक है तो आप नक्शे पर < स्ट्रिंग, डेटा स्रोत > यह बदलना चाहते हैं;)
//First convert properties to Map<String, String>
Map<String, String> m = Maps.fromProperties(properties);
//Sort them so that password < url < user for each datasource and dataSource1.* < dataSource2.*. In your case default string ordering is ok so we can take a normal treemap
Map<String, String> sorted = Maps.newTreeMap();
sorted.putAll(m);
//Create Multimap<String, List<String>> mapping datasourcename->[password,url, user ]
Function<Map.Entry<String, String>, String> propToList = new Function<String, Integer>() {
@Override
public String apply(Map.Entry<String, String> entry) {
return entry.getKey().split("\\.")[0];
}
};
Multimap<Integer, String> nameToParamMap = Multimaps.index(m.entrySet(), propToList);
//Convert it to map
Map<String, Collection<String>> mm = nameToParamMap.asMap();
//Transform it to Map<String, Datasource>
Map<String, Datasource> mSD = Maps.transformEntries(mm, new EntryTransformer<String, Collection<String>, DataSource>() {
public DataSource transformEntry(String key, Collection<String> value) {
// Create your datasource. You know by now that Collection<String> is actually a list so you can assume elements are in order: [password, url, user]
return new Datasource(.....)
}
};
//Copy transformed map so it's no longer a view
Map<String, Datasource> finalMap = Maps.newHashMap(mSD);
संभवतः एक आसान तरीका है, लेकिन यह काम करना चाहिए :)
फिर भी आप जेसन या एक्सएमएल के साथ बेहतर हैं। आप विभिन्न फाइलों के विभिन्न डेटा स्रोतों के गुण भी लोड कर सकते हैं।
EDIT2: कम अमरूद, अधिक जावा के साथ:
//Sort them so that password < url < user for each datasource and dataSource1.* < dataSource2.*. In your case default string ordering is ok so we can take a normal SortedSet
SortedSet <String> sorted = new SortedSet<String>();
sorted.putAll(m.keySet);
//Divide keys into lists of 3
Iterable<List<String>> keyLists = Iterables.partition(sorted.keySet(), 3);
Map<String, Datasource> m = new HashMap<String, Datasource>();
for (keyList : keyLists) {
//Contains datasourcex.password, datasroucex.url, datasourcex.user
String[] params = keyList.toArray(new String[keyList.size()]);
String password = properties.get(params[0]);
String url = properties.get(params[1]);
String user = properties.get(params[2]);
m.put(params[0].split("\\.")[0], new DataSource(....)
}
मुझे इसके बारे में पता है लेकिन इसके बाद आप क्या बनाने का सुझाव दे रहे हैं मानचित्र <स्ट्रिंग, डेटासोर्स> – Cemo
आप मेरे समाधान में कुछ पंक्तियां सहेज सकते हैं। मैंने उन्हें छोड़ दिया ताकि यह और अधिक पठनीय हो। – soulcheck
मैंने मतदान किया :) लेकिन मैं थोड़ा और इंतजार करना चाहता हूं। धन्यवाद :) जिस तरह से पहली बार सवाल के अस्पष्ट के लिए खेद है। Stackoverflow इसे अनदेखा :) – Cemo