我想依次获得List
个中的Integer
个,其值小于5。
我该怎么办?
TreeMap<String,Object> treeMap = new TreeMap<String,Object>();
HashMap<String,Object> map1 = new HashMap<String,Object>();
map1.put("a",1);
map1.put("b","2x");
map1.put("c",5);
map1.put("d",3);
map1.put("e",2);
List<Object> x = new ArrayList<>();
x = map1.values()
.stream()
.collect(Collectors.toList());
x.forEach(System.out::println);
答案 0 :(得分:4)
鉴于映射的所有值都不都是整数,您需要首先检查元素是否为Integer
,然后映射它,然后检查它是否小于5,如果是,则打印该元素。
map1.values()
.stream()
.filter(e -> e instanceof Integer) // is this number an integer? if yes then you can pass else no
.map(e -> (Integer)e) // map to integer so we can compare with '<' symbol
.filter(e -> e < 5)
.forEach(System.out::println);
答案 1 :(得分:0)
其他答案似乎没有满足您的部分要求:
List
个(共Integer
个)
所以我会解决这个问题:
List<Integer> sortedList =
map1.values ()
.stream ()
.filter (Integer.class::isInstance) // keep only Integers
.map (Integer.class::cast) // cast to Integer
.filter (i -> i < 5) // keep only values < 5
.sorted () // sort
.collect(Collectors.toList()); // collect into a List
System.out.println (sortedList);
输出:
[1, 2, 3]
您还可以生成int
数组而不是List<Integer>
:
int[] sortedArray =
map1.values ()
.stream ()
.filter (Integer.class::isInstance)
.mapToInt (Integer.class::cast)
.filter (i -> i < 5)
.sorted ()
.toArray();
输出:
[1, 2, 3]