Groovy获取某个索引下的列表中的所有元素

时间:2016-10-19 12:03:01

标签: list groovy elements

我想收集特定索引下特定数组列表中的所有元素。假设我有这个清单:

def names = ["David", "Arthur", "Tommy", "Jacob"]

我想打印索引2下的所有名字,在这种情况下,将打印“David,Arthur”

现在我可以很容易地使用for循环,甚至是groovy的eachWithIndex()。问题是我不想遍历所有元素,因为这样做效率不高。而不是那样,我想要跑到特定点。

groovy中有没有这样做的方法,因为我找不到。

提前致谢!

3 个答案:

答案 0 :(得分:5)

由于您从索引0开始,take方法可能是最简单的方法。

public static void main(String[] args) {
    String json = "{\"Germany\": {\"Languages\": [\"German\",\"English\",\"Austrian German\"],\"Continent\": \"unknown\",\"Capital\": \"Berlin\" }, \"China\": {\"Language\": [\"Standard Mandarin\",\"Cantenese\",\"English\"],\"Continent\": \"Asia\",\"Capital\": \"Shanghai\" }}";
    Gson gson = new Gson();
    JsonElement countryJsonElement = gson.fromJson(json, JsonElement.class);
    JsonElement germanyJsonElement = countryJsonElement.getAsJsonObject().get("Germany");

    boolean updatedFlag = false;

    if (germanyJsonElement != null) {
        if (germanyJsonElement.getAsJsonObject().get("Continent").getAsString().equalsIgnoreCase("unknown")) {
            germanyJsonElement.getAsJsonObject().remove("Continent");
            germanyJsonElement.getAsJsonObject().addProperty("Continent", "Europe");
            updatedFlag = true;
        }
    }

    if (updatedFlag) {
        countryJsonElement.getAsJsonObject().remove("Germany");
        countryJsonElement.getAsJsonObject().add("Germany", germanyJsonElement);

        System.out.println("Germany continent updated....");
        System.out.println(countryJsonElement.toString());
    } else {
        System.out.println("Germany continent not updated....");
    }

}

答案 1 :(得分:2)

使用Ranges

$string      = 'My name is tom';
$arr         = explode(' ', $string);
$arr         = array_flip($arr);
$searchwords = array("name", "tom");

foreach ($searchwords as $key => $word ) {
    if( isset($arr[ $word ]) ) {
      echo 'found';
}

使用更多的语法糖:

​def names = ["David", "Arthur", "Tommy", "Jacob"]
def idx = 2

def sublist = names[0..idx-1]

sublist.each { n ->
    println n
}

答案 2 :(得分:0)

给出清单

def names = ["David", "Arthur", "Tommy", "Jacob"]

您可以使用以下任何选项:

assert [ "Tommy", "Jacob" ] == names[ 2..<4 ]
assert [ "Tommy", "Jacob" ] == names[ 2..-1 ]
assert [ "Tommy", "Jacob" ] == names.subList( 2, 4 )
assert [ "Tommy", "Jacob" ] == names.drop( 2 )

注意,这些方法中的每一个都创建一个新的List实例,因此如果内存考虑因素很重要,那么使用例如跳过元素是有意义的。 eachWithIndex()方法或类似方法