!7 static L data; static JList list; static Q opThread = startQ(); p-subst { autoRestart(); L lines = trimAll(lines(mechList_raw("heise.de 2018/04/20 (raw)"))); data = notEndingWith(".", filter containsSpace(standAloneLines(lines)); makeList(); L ops = mechLists_intersect("Operations on lists", "Safe JavaX functions"); addToWindowWithMargin(list, jcenteredLine(map(ops, func(fS op) -> JButton { jbutton(op, r { opThread.add(r { performOp(op) }) }) }))); } svoid performOp(S op) { O newData = callAndMake(op, data); if (isStringList(newData)) data = (L) newData; else data = lines(str(newData)); makeList(); } svoid makeList { list = showList(list, data); titleStatus_trailing(list, n2(l(data), "entry", "entries")); }