【问题标题】:Using lambdas to extract an Object attribute contained in an ArrayList [duplicate]使用 lambdas 提取 ArrayList 中包含的 Object 属性 [重复]
【发布时间】:2019-03-03 12:57:12
【问题描述】:

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

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • 它不起作用是什么意思?您期望该代码做什么?为什么以及它做了什么?

标签: java arraylist lambda java-8


【解决方案1】:

假设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。另外,请记住,最好在 lambdas 中使用纯函数,没有副作用。使用streamcollect 可以让您获得所需对象的List,而不会产生具有副作用的函数。

【讨论】:

  • User::getLogin
猜你喜欢
  • 2014-01-17
  • 2015-05-02
  • 2018-03-08
  • 2014-07-02
  • 2019-02-28
  • 2016-01-20
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多