代码之家  ›  专栏  ›  技术社区  ›  Krish

Java列表中的LAMBA表达式-第一元素并通过所有元素循环

  •  3
  • Krish  · 技术社区  · 6 年前

    我可以循环遍历以下列表中的所有元素:

    userList.forEach(user -> {
        System.out.println(user);
    });
    

    我只想为第一个元素打印用户对象,但我应该为列表中的所有元素循环。 如何做到这一点?

    5 回复  |  直到 6 年前
        1
  •  0
  •   Anddo    6 年前

    如果要将某些逻辑应用于第一个用户并继续与其他用户循环,则可以使用条件检查第一个对象是否为当前对象。我从你的问题中了解到,这就是你想要的

    userList.forEach(user -> {
        if (userList.get(0) == user)
            System.out.println("This is user with index 0");
        System.out.println(user + " All users including 0");
    });
    

    正如Aomine在评论中所说,对于每次检查列表的第一个元素来说,这可能不是一个很好的解决方案,如果同一个用户对象在列表上重复,那么它可能无法正常工作,从而更好地分离这样的逻辑。

    // Do something with the first user only
    if(!userList.isEmpty())
        System.out.println(userList.get(0));
    
    // Do some stuff for all users in the list except the first one
    userList.subList(1, userList.size()).forEach(user -> {
            System.out.println(user + " All users without 0");
    );
    
    // Do some stuff for all users in the list
    userList.forEach(user -> {
            System.out.println(user + " All users");
    );
    

    另一种使用流的方法

    // Dealing with first user only
    if (!userList.isEmpty()) {
        System.out.println("this is first user: " + userList.get(0));
    }
    // using stream skipping the first element
    userList.stream().skip(1).forEach(user -> {
        System.out.println(user);
    });
    

    也可以使用迭代器方法

    // getting the iterator from the list
    Iterator<String> users = userList.iterator();
    
    // the first user
    if(users.hasNext())
        System.out.println("this is first user :" + users.next());
    
    // the rest of the users
    users.forEachRemaining(user -> {
        System.out.println(user);
    });
    
        2
  •  3
  •   Ousmane D.    6 年前

    似乎您在问,如何打印第一个对象,但对其余的元素进行迭代,并对它们执行其他逻辑,在这种情况下,您可以使用:

    if(!userList.isEmpty()) System.out.println(userList.get(0));
    userList.subList(1, userList.size()).forEach(user -> ...);
    
        3
  •  0
  •   Shubhendu Pramanik    6 年前

    这是使用的解决方案 for-each

    List<String> userList = Arrays.asList("2","3","4");
    
            IntStream.range(0, userList.size()).forEach(i -> {
                if (i == 0)
                    System.out.println(userList.get(i));
                else {
                    System.out.println("do other stuff");
                }
            });
    

    O/P:

    2
    do other stuff
    do other stuff
    
        4
  •  0
  •   Ousmane D.    6 年前

    这里是JDK9中的另一个解决方案,因为您涉及lambda表达式:

    IntStream.range(0, userList.size())
             .peek(i -> {if(i == 0) System.out.println(userList.get(i));})
             .dropWhile(i -> i == 0)
             .forEach(i -> /* some other logic here */ );
    

    就个人而言,对于生产代码,我同意 my other answer 但是,如果你只是在和lambda玩得开心,那么上面是你可以采取的另一种方法。

        5
  •  -1
  •   rlwheeler    6 年前

    这应该管用

    userList.foreach(user -> {
        If(user == userList.get(0){
            System.out.println(user)
        }
    })