如何以功能的方式替换循环中的循环



我有这样的代码:

List<Account> myAccounts = new ArrayList<>();
List<String> numbers = new ArrayList<>();
List<Account> resultList = new ArrayList<>();
for (String number : numbers) {
for (Account account : myAccounts) {
if(number.equals(account.getNumber())){
resultList.add(account);
}
}
}

我试着用指定的数字获取指定的账户,但我通过循环所有数字并与账户数字进行比较来实现这一点。我怎样才能以实用的方式做到这一点?我不是问如何把它变成一个函数,而是问如何在不必每次运行两个循环的情况下获得相同的结果。

List<Account> myAccounts = new ArrayList<>();    
List<String> numbers = new ArrayList<>();    
List<Account> resultList = myAccounts.stream()
.filter(account -> numbers.contains(account.getNumber()))
.collect(Collectors.toList());

你可以用这个。唯一的要求是您应该至少使用Java8

这样试试吧。

List<Account> results = numbers.stream().flatMap(numb -> myAccounts
.stream()
.filter(acct->numb.equals(acct.getNumber()))
.collect(Collectors.toList());

实现这一点的最佳方法是将Account对象加载到sql-lite数据库中。(或者,如果你已经有了,就把它添加到你当前的数据库中(

https://developer.android.com/training/data-storage/sqlite

然后,一旦您将所有Account对象存储在数据库中,您就可以编写一个查询来列出具有匹配号码的帐户。

下面是一个更完整的示例,介绍如何构建从创建数据库到创建对象,再到最终查询对象的所有内容。

https://www.androidauthority.com/creating-sqlite-databases-in-your-app-719366/

在函数方法中,您可以从for循环中构造一个方法,如下所示:

public void compareNumbers(List<String> numbers, List<Account> resultList){
for (String number : numbers) {
for (Account account : myAccounts) {
if(number.equals(account.getNumber())){
resultList.add(account);
}
}
}

最新更新