每个Lamba表达式的Java列表-第一个元素并遍历所有元素

时间:2018-07-29 13:59:59

标签: java lambda foreach

我可以遍历List的所有元素,如下所示:

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

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

5 个答案:

答案 0 :(得分:3)

似乎您在问,如何打印第一个对象,但是遍历其余元素并对其进行其他逻辑处理,在这种情况下,您可以使用:

if(!userList.isEmpty()) System.out.println(userList.get(0));
userList.subList(1, userList.size()).forEach(user -> ...);

答案 1 :(得分:0)

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

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在评论中说的那样,这对于每次检查列表的第一个元素可能不是一个很好的解决方案,并且如果在列表上重复相同的用户对象,则可能无法正常工作,因此最好将这样的逻辑分开< / p>

// 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 :(得分:0)

这是使用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

答案 3 :(得分:0)

这是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感兴趣,那么以上是您可以采用的另一种方法。

答案 4 :(得分:-1)

这应该有效

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