使用Lambda提取ArrayList中包含的Object属性

时间:2018-09-27 14:58:39

标签: java arraylist lambda java-8

我制作了一个名为User的类,它具有两个字符串属性:LoginPassword

我有一个包含所有现有用户的数据库(userList,类型为ArrayList<User>),我想知道是否已使用登录名。

我试图使用lambda表达式来做到这一点,但这不起作用:

ArrayList<String> loginList = null;
userListe.forEach(x->loginList.add(x.getLogin()));

我该如何解决?

1 个答案:

答案 0 :(得分:0)

假设userListeList

List<String> loginList = userListe
             .stream()
             .map(x -> x.getLogin())
             .collect(Collectors.toList));

说明:

最好使用List而不是ArrayList,因为始终最好使用接口而不是具体类型。首先,使用stream创建一个User对象流。使用map,您可以使用适当的getter从对象中获取字段。最后,您可以使用collect收集map方法返回的所有对象,在本例中为String对象。

您的loginListnull,因此第一个forEach将抛出NullPointerException。另外,请记住,最好在lambda中具有纯功能,而无副作用。使用streamcollect可使您获得List所需的对象,而不会产生副作用。