преобразовать список объектов в список целых чисел, которые проходят проверку - PullRequest
0 голосов
/ 13 декабря 2018

Я бы хотел получить 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);

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Похоже, что другой ответ не соответствует части ваших требований:

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]
0 голосов
/ 13 декабря 2018

Учитывая, что не все значения карты являются целыми числами, вам нужно сначала проверить, является ли элемент Integer, затем сопоставить его, а затем проверить, меньше ли это пять, и если да, то распечатать элемент.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...