Java根据多个条件对Map取值( 二 )

回答追问:import java.util.*;public class Main { public static void main(String args) { // 初始化数据 List\u0026lt;Map\u0026lt;String, Integer\u0026gt;\u0026gt; data = https://www.zhihu.com/api/v4/questions/34589173/new ArrayList/u0026lt;/u0026gt;(); data.add(map1()); data.add(map2()); data.add(map3()); // 构造筛选条件,以下 select_a, select_b 为 a 和 b 选择的值。 List/u0026lt;Filter/u0026gt; filters = new LinkedList/u0026lt;/u0026gt;(); if (!select_a.equals("全部")) { filters.add(new Filter() { public boolean test(Map\u0026lt;String, Integer\u0026gt; map) { return map.get("a") == select_a; } }); } if (!select_b.equals("全部")) { filters.add(new Filter() { public boolean test(Map\u0026lt;String, Integer\u0026gt; map) { return map.get("b") == select_b; } }); } // 进行筛选,各条件之间用And连接。 List\u0026lt;Map\u0026lt;String, Integer\u0026gt;\u0026gt; result = new ArrayList\u0026lt;\u0026gt;(); FOR: for (Map\u0026lt;String, Integer\u0026gt; map : data) { for (Filter filter : filters) { if (!filter.test(map)) { continue FOR; } } result.add(map); } // 打印数据 for (Map\u0026lt;String, Integer\u0026gt; map : result) { System.out.println(map); } } public interface Filter { boolean test(Map\u0026lt;String, Integer\u0026gt; map); } private static Map\u0026lt;String, Integer\u0026gt; map1() { Map\u0026lt;String, Integer\u0026gt; map = new HashMap\u0026lt;\u0026gt;(); map.put("a", 1); map.put("b", 2); map.put("c", 3); return map; } private static Map\u0026lt;String, Integer\u0026gt; map2() { Map\u0026lt;String, Integer\u0026gt; map = new HashMap\u0026lt;\u0026gt;(); map.put("a", 2); map.put("b", 2); map.put("c", 3); return map; } private static Map\u0026lt;String, Integer\u0026gt; map3() { Map\u0026lt;String, Integer\u0026gt; map = new HashMap\u0026lt;\u0026gt;(); map.put("a", 1); map.put("b", 3); map.put("c", 2); return map; }}
■网友
题主的这种操作比较像关系数据库的查询,如果题主用的是关系型数据库的话,直接写SQL语句查询就可以,没有必要全取出来再自己过滤。


推荐阅读