Разделение observableList с помощью toString - PullRequest
0 голосов
/ 15 октября 2019

Итак, я пытаюсь разделить observableList с помощью toString:

listeMedLag = DataHandler.hentDataCupLag("src/arrangementer.csv",2,listeMedLag,cup); //output: Skjeberg&Borgen
listeMedLag.toString().split("&");
lagSomErMed.setItems(listeMedLag); //output: Skjeberg&Borgen

Кто-нибудь знает, почему список не разделяется?

Ответы [ 3 ]

3 голосов
/ 15 октября 2019
listeMedLag.toString()

Создает строку на основе элементов списка. Есть несколько проблем с этим. Реализация ObservableList может не создавать ожидаемый строковый вывод. Также обычно есть {} обтекание содержимого.

Также вызов методов для объектов, возвращаемых методами объекта, обычно не влияет на исходный объект. Есть исключения, но они задокументированы. (Примеры будут List.subList и List.iterator). String является неизменным и не имеет никакого отношения к списку. Вызов split для строки просто приводит к созданию нового массива String[], который содержит части строки. Он не влияет на строковый объект, а также не влияет на список.

Если вы хотите разделить каждый элемент List<String> и заполнить список всеми этими элементами, я рекомендую вам создать новый списоксвязавшись со всеми этими элементами, а затем назначить содержимое целевому списку:

List<String> inputList = ...
ObservableList<String> outputList = FXCollections.observableArrayList();

// fill new list with elements of original list split at "&"
inputList.stream().map(s -> s.split("&")).forEach(outputList::addAll);

// do something with new list
listView.setItems(outputList);
0 голосов
/ 17 октября 2019

Вы можете использовать flatMap для преобразования списка в список с другим количеством элементов.

        list.setAll(list.stream()
            .flatMap(item -> Arrays.asList(item.split("&")).stream())
            .collect(Collectors.toList()));

Это установит содержимое list для новых элементов, поэтому, если у вас естьслушатели, вероятно, их уволят много.

0 голосов
/ 15 октября 2019

Вам нужно сохранить эту разделенную строку в локальной переменной. как:

String[] split =  = listeMedLag.toString().split("&");
lagSomErMed.setItems(split);

или

lagSomErMed.setItems(listeMedLag.toString().split("&"));

split подпись метода:

public String[] split(String regex)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...