Кодът по-долу работи, но имам известие от SonarLint, защото използвам анонимен клас в поток вместо ламбда израз и не виждам как да подобря кода по-долу, като избягвам известието:
Properties prop = new Properties();
Properties temp = new Properties();
//... add some values and keys in prop and temp
prop.putAll(temp.entrySet().stream()
.filter( entry -> !prop.containsKey(entry.getKey()))
.map( new Function<Entry<Object, Object>, Entry<String, String>>(){
@Override
public Entry<String, String> apply(Entry<Object, Object> entry) {
return new Entry<String, String>() {
@Override
public String setValue(String value) {
return value.trim().toLowerCase();
}
@Override
public String getValue() {
return ((String) entry.getValue()).trim().toLowerCase();
}
@Override
public String getKey() {
return ((String) entry.getKey()).trim().toLowerCase();
}
};
}
})
.collect(Collectors.toMap(Entry<String,String>::getKey, Entry<String,String>::getValue)));
Обяснение на кода: Използвам класа свойства от java.util и за съжаление entrySet
от свойствата връща Entry<Object, Object>
, а не Entry<String, String>
. Искам да "съединя" двата обекта на свойствата, като поставям ключ и стойност в малки букви. И така, картата позволява преобразуване на Entry<Object, Object>
в Entry<String,String>
. Ето защо има анонимен клас.