given widget class:
class widget { string name widgettype type boolean israd } enum widgettype { fizz, buzz, foo } my groovy code handed list<widget> may populated so:
list<widget> allwidgets = [] widget w1 = new widget(name: "w1", type: widgettype.fizz, israd: true) widget w2 = new widget(name: "w2", type: widgettype.fizz, israd: true) widget w3 = new widget(name: "w3", type: widgettype.buzz, israd: false) widget w4 = new widget(name: "w4", type: widgettype.buzz, israd: false) widget w5 = new widget(name: "w5", type: widgettype.foo, israd: true) widget w6 = new widget(name: "w6", type: widgettype.foo, israd: false) allwidgets << w1 allwidgets << w2 allwidgets << w3 allwidgets << w4 allwidgets << w5 allwidgets << w6 what want accomplish grouping of elements in allwidgets according widget#type. effectively, turning above list multiple lists (1 per type) so:
list<widget> fizzwidgets = [] list<widget> buzzwidgets = [] list<widget> goowidgets = [] widget w1 = new widget(name: "w1", type: widgettype.fizz, israd: true) widget w2 = new widget(name: "w2", type: widgettype.fizz, israd: true) widget w3 = new widget(name: "w3", type: widgettype.buzz, israd: false) widget w4 = new widget(name: "w4", type: widgettype.buzz, israd: false) widget w5 = new widget(name: "w5", type: widgettype.foo, israd: true) widget w6 = new widget(name: "w6", type: widgettype.foo, israd: false) fizzwidgets << w1 fizzwidgets << w2 buzzwidgets << w3 buzzwidgets << w4 foowidgets << w5 foowidgets << w6 i believe collect closure can used here, attempts far have failed, best being:
allwidgets.collect { widget -> it.type } any ideas can here? , while accept pure java answer, i'm hoping elegant and...well, groovy.
what need not collect groupby:
allwidgets.groupby { it.type } as result map<widgettype, list<widget>> returned.
demo:
enum widgettype { fizz, buzz, foo } class widget { string name widgettype type boolean israd } list<widget> allwidgets = [ widget w1 = new widget(name: "w1", type: widgettype.fizz, israd: true), widget w2 = new widget(name: "w2", type: widgettype.fizz, israd: true), widget w3 = new widget(name: "w3", type: widgettype.buzz, israd: false), widget w4 = new widget(name: "w4", type: widgettype.buzz, israd: false), widget w5 = new widget(name: "w5", type: widgettype.foo, israd: true), widget w6 = new widget(name: "w6", type: widgettype.foo, israd: false), ] def grouped = allwidgets.groupby { it.type } list<widget> fizzwidgets = grouped[widgettype.fizz] list<widget> buzzwidgets = grouped[widgettype.buzz] list<widget> foowidgets = grouped[widgettype.foo] assert fizzwidgets.size() == 2 assert fizzwidgets.every { it.type == widgettype.fizz } assert buzzwidgets.size() == 2 assert buzzwidgets.every{ it.type == widgettype.buzz } assert foowidgets.size() == 2 assert foowidgets.every { it.type == widgettype.foo } assert grouped instanceof map assert grouped.keyset().every { instanceof widgettype } assert grouped.values().every { instanceof list } assert grouped.values().flatten().every { instanceof widget } here can find groupby docs.
Comments
Post a Comment