Java流集合图

问题描述 投票:0回答:2

我有一个地图,其中包含作为键字符串和作为值的对象列表

Names
。在这张地图中,我保存了一些关于
Names
的信息。 ``类的每个对象都有一个名称、性别和等级属性。

Map <String, ArrayList<Names>> myMap = new TreeMap<>();

我尝试这样做,但没有成功:

List<Names> filterList = myMap.filter((k, v) -> v.name == name).collect(Collectors.toList);
java java-stream maps
2个回答
1
投票

假设输入图是这样的:

Map<String, List<BabyName>> inputMap;

应使用 Stream API 的

BabyName
flatMap
操作来检索
filter
的列表:

List<BabyName> result = inputMap.values() // Collection<List<BabyName>>
        .stream() // Stream<List<BabyName>>
        .flatMap(List::stream) // Stream<BabyName>
        .filter(bn -> bn.getRank() == 3) // filtered Stream<BabyName>
        .collect(Collectors.toList());

0
投票

这就是我会做的,不确定我在这里是否有帮助。我对 Java 和一般编程还相当陌生。

//Method that takes an ArrayList, filter the list, and returns a new ArrayList
public static ArrayList<BabyName> filterArrayList(ArrayList<BabyName> inputList, int filter) {
        ArrayList<BabyName> returnList = new ArrayList<>();
        for (BabyName babyName: inputList) {
            if (babyName.getRank() == filter)
                returnList.add(babyName);
        } return returnList;
    }

这段代码基本上迭代了TreeMap,并调用了上面的方法。上述方法返回的 ArrayList 被添加到一个新的 ArrayList

mFilteredList

ArrayList<BabyName> mFilteredList = new ArrayList<>();

for (Iterator<ArrayList<BabyName>> iterator = myMap.values().iterator(); iterator.hasNext(); ) {
            ArrayList<BabyName> nameList = iterator.next();
            mFilteredList.addAll(filterArrayList(nameList, 2));
        }
© www.soinside.com 2019 - 2024. All rights reserved.