groovy list indexOf
Asked Answered
L

3

9

If I have a list with following elements

list[0] = "blach blah blah"
list[1] = "SELECT something"
list[2] = "some more text"
list[3] = "some more text"

How can I find the index of where the string starts with SELECT.

I can do list.indexOf("SELECT something");

But this is a dynamic list. SELECT something wont always be SELECT something. it could be SELECT somethingelse or anything but first word will always be SELECT.

Is there a way to apply regex to the indexOf search?

Loud answered 8/10, 2009 at 21:53 Comment(1)
I would stray away from RegEx in java for performance issues, but take a look at java.sun.com/docs/books/tutorial/essential/regex . Off the top of my head, I don't think there is a simple way of doing this, except manually iterating through your array.Naive
R
6

You can use a regex in find:

def list = ["blach blah blah", "SELECT something", "some more text", "some more text"]

def item = list.find { it ==~ /SELECT \w+/ }

assert item == "SELECT something"

list[1] = "SELECT somethingelse"

item = list.find { it ==~ /SELECT \w+/ }

assert item == "SELECT somethingelse"
Recalesce answered 9/10, 2009 at 0:16 Comment(0)
B
25
def list = ["blach blah blah", "SELECT something", "some more text", "some more text"]
def index = list.findIndexOf { it ==~ /SELECT \w+/ }

This will return the index of the first item that matches the regex /SELECT \w+/. If you want to obtain the indices of all matching items replace the second line with

def index = list.findIndexValues { it ==~ /SELECT \w+/ }
Biceps answered 9/10, 2009 at 13:38 Comment(0)
R
6

You can use a regex in find:

def list = ["blach blah blah", "SELECT something", "some more text", "some more text"]

def item = list.find { it ==~ /SELECT \w+/ }

assert item == "SELECT something"

list[1] = "SELECT somethingelse"

item = list.find { it ==~ /SELECT \w+/ }

assert item == "SELECT somethingelse"
Recalesce answered 9/10, 2009 at 0:16 Comment(0)
D
0

Another alternative:

def test = ["A","B","C"]
def boo = "X"

test.add(test.findIndexOf{ it == "B" }, boo)

println "${test}"

Result: [A, X, B, C]

Dispensable answered 29/7 at 17:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.