2015-01-19 2 views
1

я получил следующие переменныелямбда Еогеасп добавить к карте не работает

List<Pruefvorschrift> listP = new ArrayList<Pruefvorschrift>(); 
ObservableMap<TestDevice,List<Pruefvorschrift>> testDev = FXCollections.emptyObservableMap(); 

в одной функции я хочу, чтобы заполнить testDev с помощью лямбда-выражения

//first call REST service and get data 
List<TestDevice> test_dev = call.getTestDevice(""); 
//now do a foreach to add each entry (as key) to the testDev ObservableMap with a empty List (as value) 
test_dev.stream().forEach(td ->{ 
        TestDevice t = td;      
        testDev.put(t, listP); 
      }); 

но все я получаю ошибку

java.lang.UnsupportedOperationException на java.util.AbstractMap.put (AbstractMap.java:209)

, который, очевидно, эта строка

testDev.put(t, listP); 

может быть, я неправильно понял новый поток апи, но я только хочу, чтобы заполнить наблюдаемую карту со всеми результата вызова (ключ) и пустой список (значение который будет изменен позже). Любая помощь? Thx

ответ

5

Независимо от типа Map возвращается FXCollections#emptyObservableMap

FXCollections.emptyObservableMap(); 

не поддерживает метод put. Вы ничего не можете добавить к нему. Как Javadoc утверждает

Создает и [так] пустой неизменяемого наблюдаемого списка.

Это не имеет ничего общего с лямбда-выражениями или Stream api.

+0

THx так много. был настолько слеп ... :) – Inge

0

просто для завершения здесь (Sotirios Delimanolis был абсолютно прав, и я так ошибался :). Моя проблема была решена путем делать правильную работу с самой картой

//create empty map 
Map<TestDevice,List<Pruefvorschrift>> map = new HashMap<TestDevice,List<Pruefvorschrift>>(); 
//use this map to create the ObservableMap 
ObservableMap<TestDevice,List<Pruefvorschrift>> testDev = FXCollections.observableMap(map); 

И все работает ... Thx Sotirios

Смежные вопросы