关于java:Java-8使用Stream-API将Map中的对象元素遍历出来并根据条件过滤元素放入List中

27次阅读

共计 1298 个字符,预计需要花费 4 分钟才能阅读完成。

在 Java 8 中,能够应用 Stream API 将 Map 中的对象元素遍历进去并依据条件过滤,而后将符合条件的元素放入 List 中。上面是一种常见的形式:

假如有一个 Map,其中蕴含 Person 对象作为值,每个 Person 对象有惟一的 ID 和对应的姓名。咱们想要遍历这个 Map,并过滤出 ID 大于等于 2 的 Person 对象,而后将这些 Person 对象放入一个 List 中。

首先,确保 Person 类具备 getId()和 getName()办法,用于获取 ID 和姓名。

而后,应用 Map 的 entrySet()办法获取 Map 中的所有键值对(Entry 对象),再应用 Stream API 进行遍历和过滤操作。

以下是示例代码:

java
import java.util.*;
import java.util.stream.Collectors;

class Person {
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {return id;}

    public String getName() {return name;}
}
public class Main {public static void main(String[] args) {Map<Integer, Person> personMap = new HashMap<>();
        personMap.put(1, new Person(1, "John"));
        personMap.put(2, new Person(2, "Alice"));
        personMap.put(3, new Person(3, "Bob"));
        personMap.put(4, new Person(4, "David"));

        List<Person> filteredList = personMap.entrySet().stream()
                .filter(entry -> entry.getKey() >= 2)
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        System.out.println(filteredList);
    }
}

运行以上代码,输入后果为:

[{id=2, name=Alice}, {id=3, name=Bob}, {id=4, name=David}]

在这个示例中,咱们首先应用 Map 的 entrySet()办法获取蕴含键值对的 Set 汇合。而后,通过 Stream API 进行解决:

  1. 应用 filter()办法过滤出键(ID)大于等于 2 的 Entry 对象;
  2. 应用 map()办法将符合条件的 Entry 对象转换为对应的 Person 对象;
  3. 最初,应用 collect()办法将过滤后的 Person 对象收集到 List 中。

留神,示例中的 {id=2, name=Alice} 示意一个 Person 对象,因为应用了默认的 toString()办法,所以输入的格局与一般的 Person 类不同。

你能够依据具体的需要批改代码,替换 Person 类的属性和判断条件,以及要放入 List 中的对象类型。

正文完
 0