Java SE 8에서 게으른 기능 연산으로 놀고 있으며 두 번째 요소 를 기반으로 한 쌍 / 튜플에 map
색인 i
을 만들고 마지막으로 색인 만 출력 하려고합니다 .(i, value[i])
filter
value[i]
여전히이 문제를 겪어야 합니까? Java에서 C ++ Pair <L, R>에 해당하는 것은 무엇입니까? 람다와 개울의 대담한 새로운 시대에?
업데이트 : 나는 아래 답변 중 하나에서 @dkatzel이 제공하는 깔끔한 솔루션을 가진 다소 단순화 된 예를 제시했습니다. 그러나 일반화 되지는 않습니다 . 따라서보다 일반적인 예를 추가하겠습니다.
package com.example.test;
import java.util.ArrayList;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
boolean [][] directed_acyclic_graph = new boolean[][]{
{false, true, false, true, false, true},
{false, false, false, true, false, true},
{false, false, false, true, false, true},
{false, false, false, false, false, true},
{false, false, false, false, false, true},
{false, false, false, false, false, false}
};
System.out.println(
IntStream.range(0, directed_acyclic_graph.length)
.parallel()
.mapToLong(i -> IntStream.range(0, directed_acyclic_graph[i].length)
.filter(j -> directed_acyclic_graph[j][i])
.count()
)
.filter(n -> n == 0)
.collect(() -> new ArrayList<Long>(), (c, e) -> c.add(e), (c1, c2) -> c1.addAll(c2))
);
}
}
이것은 모두 세 개의 열에 대한 카운트 에 해당하는 잘못된 출력을 제공 합니다 . 내가 필요한 것은 이 세 열의 지표 입니다. 올바른 출력은이어야합니다 . 이 결과를 어떻게 얻을 수 있습니까?[0, 0, 0]
false
[0, 2, 4]
i
스트림 을 보존하지 않고는 할 수 없습니다 . 또한 value[i]
기준이 필요 합니다. 그래서 내가 필요한 이유(i, value[i])
[0, 2, 4]
?
AbstractMap.SimpleImmutableEntry<K,V>
몇 년이 지났지 만 ... 어쨌든 그냥 필터링으로 매핑하고 다시 매핑i
하는 대신에 : 매핑없이 처음부터 필터링하는 것이 어떻습니까?(i, value[i])
value[i]
i
value[i]