将 int 数组拆分为流
Break array of int to stream
我有一个class
public class Targets {
public int[] miniTargets;
public Targets(int t) {
miniTargets = new int[t];
for (int i = 0; i < t; i++) {
miniTargets[i] = t;
}
}
}
我想数一数我在 Targets
collection 中有多少 miniTargets
但我坚持 flatMap
:
public class App {
public static void main(String[] args) {
List<Targets> lst = new ArrayList<Targets>();
lst.add(new Targets(5));
lst.add(new Targets(15));
lst.add(new Targets(25));
int cnt = (int)lst.stream().map(tg -> tg.miniTargets).flatMap(...).count()
System.out.println(cnt);
}
}
如果您想要 miniTargets
个数组的总长度:
int cnt = lst.stream()
.mapToInt(tg -> tg.miniTargets.length)
.sum();
如果你想要一个包含 miniTargets 的 IntStream :
IntStream minis = lst.stream()
.flatMapToInt (tg -> IntStream.of(tg.miniTargets));
您不需要使用 flatMap
。只需调用 mapToInt
每个数组的长度,然后调用 sum()
.
int cnt = lst.stream().mapToInt(tg -> tg.miniTargets.length).sum();
虽然您可能想要使用访问器并封装您的数据:
class Targets {
private miniTargets;
...
public int size() {
return miniTargets.length;
}
}
然后它会来:
int cnt = lst.stream().mapToInt(Targets::size).sum();
如果你想要一个 IntStream 将所有的值,你可以这样做:
IntStream allValues = lst.stream()
.map(tg -> tg.miniTargets)
.flatMapToInt(Arrays::stream);
我有一个class
public class Targets {
public int[] miniTargets;
public Targets(int t) {
miniTargets = new int[t];
for (int i = 0; i < t; i++) {
miniTargets[i] = t;
}
}
}
我想数一数我在 Targets
collection 中有多少 miniTargets
但我坚持 flatMap
:
public class App {
public static void main(String[] args) {
List<Targets> lst = new ArrayList<Targets>();
lst.add(new Targets(5));
lst.add(new Targets(15));
lst.add(new Targets(25));
int cnt = (int)lst.stream().map(tg -> tg.miniTargets).flatMap(...).count()
System.out.println(cnt);
}
}
如果您想要 miniTargets
个数组的总长度:
int cnt = lst.stream()
.mapToInt(tg -> tg.miniTargets.length)
.sum();
如果你想要一个包含 miniTargets 的 IntStream :
IntStream minis = lst.stream()
.flatMapToInt (tg -> IntStream.of(tg.miniTargets));
您不需要使用 flatMap
。只需调用 mapToInt
每个数组的长度,然后调用 sum()
.
int cnt = lst.stream().mapToInt(tg -> tg.miniTargets.length).sum();
虽然您可能想要使用访问器并封装您的数据:
class Targets {
private miniTargets;
...
public int size() {
return miniTargets.length;
}
}
然后它会来:
int cnt = lst.stream().mapToInt(Targets::size).sum();
如果你想要一个 IntStream 将所有的值,你可以这样做:
IntStream allValues = lst.stream()
.map(tg -> tg.miniTargets)
.flatMapToInt(Arrays::stream);