読者です 読者をやめる 読者になる 読者になる

Wicket ListView のイテレータ を無理やり Stream で処理してみる

Wicket ListView が提供する itarator メソッドは、以下のような使い方もできる。

無理やり、イテレータを Stream に変換して処理してみた。

final WebMarkupContainer listViewContainer = new WebMarkupContainer("listview_container");
listViewContainer.setOutputMarkupId(true);
queue(listViewContainer);
queue(new ListView<ReservDevice>("listview", new PropertyModel<List<Foo>>(this, "fooList")){
	@Override
	protected void populateItem(final ListItem<ReservDevice> item){
		item.add(new TextField<String>("user_name", new Model<>());
		item.add(new AjaxButton("check"){
			restuructFunction();
			target.add(listViewContainer)
		}):
	}
	// リストイテレータで処理する
	private void restuructFunction(){
		// リストをクリアして入れ直す。
		fooList.clear();
		
		StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(), Spliterator.ORDERED), false).forEach(i->{
			Foo f = new Foo();
			f.userName = ((TextField<String>)i.get("user_name")).getModelObject();
			fooList.add(f);
		});
	}
});