Картаны <Объект, Объект> дегенді java жүйесінде <String, String> түріне қалай өзгертуге болады?

Менде түрі объектінің картасы бар, мен бұл картаны түр String түріне айналдыру керек.

Map map = new HashMap();    
Properties properties = new Properties();    
properties.load(instream);     

Кез-келген дене маған жоғарыда көрсетілген картаға қасиеттерді қалай беру керектігін айтады ма?

Thanks & Regards, Msnaidu

0
ықтимал көшірмесі java.util.Properties түрлендіру HashMap
қосылды автор Dave Jarvis, көзі
иә, сіз дұрыс.
қосылды автор M.S.Naidu, көзі
stackoverflow.com/a/3958306/1862502 торабын тексеріңіз
қосылды автор Vignesh Vino, көзі
Properties қандай нысан болып табылады?
қосылды автор Timothy Groote, көзі
@TimothyGroote - Менің ойымша, бұл java.util.Properties .
қосылды автор Andrzej Doyle, көзі

7 жауаптар

Картаға қасиеттерді қосудың ең таза жолы (сіздің мысалыңызға сәйкес):

for (String propName : properties.stringPropertyNames()) {
    map.put(propName, properties.getProperty(propName));
}

This works nicely in this particular case, because the Properties object is really a map containing String keys and values, as the getProperty method makes clear. It's only declared as Map for horrible backwards-compatibility reasons.

By using the Properties-specific methods, rather than treating this as just a Map, you can populate your Map with perfect type-safety (rather than having to cast).

3
қосылды
Мен HashMap кеңейтетін қасиеттердің себептерін білдім және бұл stackoverflow.com/questions/873510/…
қосылды автор JohnEye, көзі
Map properties2Map(Properties p) {
            Map map = new HashMap();
            for(Map.Entry entry : p.entrySet()) {
                String key = (String) entry.getKey(); //not really unsafe, since you just loaded the properties
                map.put(key, p.getProperty(key));
            }
            return map;
}

Мен сондай-ақ, типтік дәлелдермен пайдалы әдістерді жалпы типті инварианттармен серуендеуге және кейбір «төмендету» немесе «жаңару» жасауды (бұл туралы білуім керек болған кезде) қолданғым келеді. Бұл жағдайда:

@SuppressWarnings("unchecked")
 Map downCastMap(Map map) {
    return (Map)map; } 

Сонда сіз жаза аласыз

Properties p = ...
Map map = downCastMap(p);
3
қосылды
оны Карта map = (Карта) сипаттары сияқты қоюға болады;
қосылды автор M.S.Naidu, көзі
Ия, rawtypes-ды басу және бақылаусыз. Дегенмен, утилита әдісі кодты оқыған кез келген адамға (және өзіңізге) құжаттарды кодтау болып табылады.
қосылды автор dkateros, көзі

Тікелей түрлендіруге болады:

Properties properties = new Properties();
Map map = new HashMap((Map)properties);
3
қосылды

Біз білеміз , өйткені Properties қасиеттер String-to-String салыстыру болып табылады, ол оны шикізатпен және тексерілмеген түрлендіру арқылы сақтайды. Пікір қалдырыңыз:

    Properties properties = new Properties();    
    properties.load(instream); 

    @SuppressWarnings({ "rawtypes", "unchecked" })
   //this is save because Properties have a String to String mapping
    Map map = new HashMap(properties);
1
қосылды
> интерфейсті іске асыратындықтан, Map түріне Properties немесе өзгерту Карта <�Объект, Объект> .
қосылды автор Andreas_D, көзі
Ия, бірақ неге жаңа HashMap данасы жасалады?
қосылды автор dkateros, көзі
Жоғарыдағы жауапқа және түсініктемелерге назар аударыңыз.
қосылды автор dkateros, көзі

Java 8 және Ағындылар , мен сізге ұсынамын Steam қамтамасыз API интерфейстерін пайдалану

Мұнда, біз әрбір мәннің шын мәнінде String нысандары болып табылатындығын болжап отырмыз, String-ге тастау қауіпсіз болуы керек:

Map map = new HashMap<>();

Map stringifiedMapSafe = map.entrySet().stream()
     .collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));

Енді барлық элементтің String екеніне сенімді болмасақ, біз null -мен кілтті/мәндерді сүзгілейік:

Map map = new HashMap<>();

Map stringifiedMapNotSafe = map.entrySet().stream()
             .filter(m -> m.getKey() != null && m.getValue() !=null)
             .collect(Collectors.toMap(Map.Entry::getKey, e -> (String)e.getValue()));
1
қосылды
Map getPropInMap(Properties prop){       
    Map myMap = new HashMap();
    for (Object key : prop .keySet()) {
        myMap.put(key.toString(), prop .get(key).toString());
    }       
    return myMap;
}
0
қосылды

Карта объектісіне аударыңыз, k v алыңыз, оларды жолға қойыңыз және оны Map String-ге қойыңыз.

Map map1;//with object k,v
Map mapString = new HashMap(); for (Object key : map1.keySet()) { String k = key.toString(); String v = mmap1.get(key).toString(); mapString.put(k, v); } 
0
қосылды