ฉันกำลังเล่นกับการทำงานที่ขี้เกียจใน Java SE 8 และฉันต้องการmap
ดัชนีi
ไปเป็นคู่ / tuple (i, value[i])
จากนั้นfilter
ขึ้นอยู่กับvalue[i]
องค์ประกอบที่สองและสุดท้ายก็ส่งออกดัชนี
ฉันต้องยังคงประสบกับสิ่งนี้: อะไรคือสิ่งที่เทียบเท่าของ C ++ Pair <L, R> ใน Java? ในยุคใหม่ที่กล้าหาญของ lambdas และลำธาร?
อัปเดต:ฉันนำเสนอตัวอย่างที่ค่อนข้างง่ายซึ่งมีโซลูชันที่นำเสนออย่างประณีตโดย @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]
ในตอนแรกโดยไม่มีแผนที่