java 在哈希Map列表中查找列表项

ct2axkht  于 2023-02-20  发布在  Java
关注(0)|答案(2)|浏览(128)

我有一个List<Map<String, Object>>,想通过id找到一个条目,然后返回该HashMap的一个属性,让我用一个例子来说明这一点:

List<Map<String, Object>> test = new ArrayList<Map<String, Object>>();
    
var first = new HashMap<String, Object>();
first.put("Id", "4711");
first.put("State", "Ok");
    
var second = new HashMap<String, Object>();
second.put("Id", "4712");
second.put("State", "Not Ok");
    
test.add(first);
test.add(second);

如何搜索Id为4712的散列表并获得它的State
我知道我可以通过手动迭代列表来实现这一点。但是,我更希望通过流来实现这一点。

kuarbcqp

kuarbcqp1#

正如Joachim Sauer在他的评论中所写的,仅仅因为Java编程语言的某些方面更新(并且看起来“更酷”)并不意味着它更好。
合适的工具适合合适的工作。
无论如何,下面的代码会从您的问题中提供的输入生成所需的结果。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        List<Map<String, Object>> test = new ArrayList<Map<String, Object>>();
        var first = new HashMap<String, Object>();
        first.put("Id", "4711");
        first.put("State", "Ok");
        var second = new HashMap<String, Object>();
        second.put("Id", "4712");
        second.put("State", "Not Ok");
        test.add(first);
        test.add(second);

        Object val = test.stream() // Every element in stream has type Map<String, Object>
                         .filter(m -> "4712".equals(m.get("Id")))
                         .findFirst() // returns Optional<Map<String, Object>>
                         .get() // throws 'NoSuchElementException' if nothing found
                         .get("State"); // i.e. java.util.Map#get
        System.out.println(val);
    }
}

运行上述代码将显示:

Not Ok
erhoui1w

erhoui1w2#

您可以使用get方法并将“4712”作为键传递。
请参见Java文档,网址为https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#get-java.lang.Object-

相关问题