java guava 使用_java – 使用Guava从属性文件创建对象
Properties類(lèi)是HashTable的子類(lèi),HashTable又實(shí)現(xiàn)了Map.
你像往常一樣加載它:
Properties properties = new Properties();
try {
properties.load(new FileInputStream("filename.properties"));
} catch (IOException e) {
}
編輯:好的,所以你想將它轉(zhuǎn)換為Map< String,Datasource> 😉
//First convert properties to Map
Map 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 sorted = Maps.newTreeMap();
sorted.putAll(m);
//Create Multimap> mapping datasourcename->[password,url, user ]
Function, String> propToList = new Function() {
@Override
public String apply(Map.Entry entry) {
return entry.getKey().split("\\.")[0];
}
};
Multimap nameToParamMap = Multimaps.index(m.entrySet(), propToList);
//Convert it to map
Map> mm = nameToParamMap.asMap();
//Transform it to Map
Map mSD = Maps.transformEntries(mm, new EntryTransformer, DataSource>() {
public DataSource transformEntry(String key, Collection value) {
// Create your datasource. You know by now that Collection 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 finalMap = Maps.newHashMap(mSD);
可能有一種更簡(jiǎn)單的方法,但這應(yīng)該工作:)
還是你用json或xml更好.您還可以從不同的文件加載不同數(shù)據(jù)源的屬性.
edit2:少用番石榴,更多java:
//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 sorted = new SortedSet();
sorted.putAll(m.keySet);
//Divide keys into lists of 3
Iterable> keyLists = Iterables.partition(sorted.keySet(), 3);
Map m = new HashMap();
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(....)
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的java guava 使用_java – 使用Guava从属性文件创建对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java中servletcontext_
- 下一篇: pyspider 连接mysql_pys