我有课
public class ListItem {
private final String text;
private final BooleanProperty isSelected = new SimpleBooleanProperty();
public BooleanProperty selectedProperty() {
return isSelected ;
}
public final boolean isSelected() {
return selectedProperty().get();
}
public final void setSelected(boolean isSelected) {
selectedProperty().set(isSelected);
}
public ListItem(String text) {
this.text = text ;
}
public String getText() {
return text;
}
@Override
public String toString() {
return getText();
}
}
在其他课程中我有这个
private ObservableList<ListItem> ListData = FXCollections.observableArrayList();
代码中的一些地方我这样做:
Stream<String> stream = Files.lines(Paths.get(FILENAME), Charset.forName("windows-1251") );
ListData = stream
.filter(line -> line.startsWith("File"))
.map(line -> line.substring(line.indexOf("=") + 1, line.length()))
.collect(Collectors.toCollection(????));
我必须写什么?将字符串流值转换为ListItem值的位置?这种转换是可能的吗?
答案 0 :(得分:1)
由于您已经创建了ObservableList
,因此您只需使用forEach
将每个项目添加到ListData
即可。此外,您需要使用ListItem
的构造函数将流的每个元素包装在ListItem
中:
stream
.filter(line -> line.startsWith("File"))
.map(line -> line.substring(line.indexOf("=") + 1)) // there's also a version of substring that only takes the start index
.map(ListItem::new) // equivalent to .map(line -> new ListItem(line))
.forEach(ListData::add);
如果列表可能不为空,则需要在ListData.clear();
之前。
答案 1 :(得分:0)
collectionFactory
的{{1}}参数会创建一个Collectors.toCollection()
,然后Collection
为该流的每个成员调用add()
。
您需要将流中的字符串转换为ListItem
s - 为此使用其他map
,然后您可以使用Collectors.toList()
。