элемент данных объекта карты потока Java в список int - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно поместить Aa и Ab в список int по порядку:

class A {
    int a;
    int b;
}
A a = new A();
a.a = 1;
a.b = 2;
List<A> list = Arrays.asList(a);
List<Integer> intList = list.stream().map(?).collect(Collectors.toList());
assert intList.equals(Arrays.asList(1,2));

Как сделать это потоком?И как сделать это в обратном порядке?

Я имею в виду "в обратном порядке" создать List<A> в соответствии с List<Integer>, потому что пример кода создать List<Integer> в соответствии с List<A>.Извините за бриф.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Просто создайте Stream целых чисел A и flatMap этого Stream, чтобы целые числа A anA становились частью внешнего Stream.

  List<Integer> intList = list.stream()
    .flatMap(anA -> Stream.of(anA.a, anA.b))
    .collect(Collectors.toList());

РЕДАКТИРОВАТЬ
Вы просили и наоборот:

  IntStream.range(0, intList.size() / 2)
   .mapToObj(i -> new A(intList.get(2*i), intList.get(2*i+1)))
   .collect(Collectors.toList());

Это подразумевает конструктор в классе A:

A(int a, int b) {
    this.a = a;
    this.b = b;
}

Быстрый тест:

public static void main(String[] args) throws Exception {
    List<A> list = Arrays.asList(new A(1, 2), new A(3, 4), new A(11, 22));
    List<Integer> intList = list.stream().flatMap(anA -> Stream.of(anA.a, anA.b)).collect(Collectors.toList());
    System.out.println(intList);
    List<A> aList = IntStream.range(0, intList.size() / 2).mapToObj(i -> new A(intList.get(2 * i), intList.get(2 * i + 1))).collect(Collectors.toList());
    System.out.println(aList);
}

Вывод:

[1, 2, 3, 4, 11, 22]
[[1|2], [3|4], [11|22]]
0 голосов
/ 28 сентября 2018
List<Integer> intList = Arrays.asList(A).stream()
                              .flatMap(A -> Stream.of(A.a, A.b))
                              .collect(Collectors.toList());

List<Integer> reverseIntList = Arrays.asList(A).stream()
                                     .flatMap(A -> Stream.of(A.a, A.b))
                                     .collect(LinkedList::new, LinkedList::addFirst, (res, tmp) -> tmp.forEach(res::addFirst));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...