让我们考虑一下:k=2
并让List<String> : ["12", "23", "34", "45", "56"]
。
我们想返回以下列表1...k
优雅的解决方案怎么样?是否有可能用流做?
当然它可以通过多种方式解决,最简单的方法是使用嵌套列表var data = [0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 1.4, 1.45, 1.5, 1.55, 1.6, 1.65, 1.7, 1.75, 1.8, 1.85, 1.9, 1.95, 2, 2.05, 2.1, 2.15, 2.2, 2.25, 2.3, 2.35, 2.4, 2.45, 2.5, 2.55, 2.6, 2.65, 2.7, 2.75, 2.8, 2.85, 2.9, 2.95, 3, 3.05, 3.1, 3.15, 3.2, 3.25, 3.3, 3.35, 3.4, 3.45, 3.5, 3.55, 3.6, 3.65, 3.7, 3.75, 3.8, 3.85, 3.9, 3.95, 4, 4.05, 4.1, 4.15, 4.2, 4.25, 4.3, 4.35, 4.4, 4.45, 4.5, 4.55, 4.6, 4.65, 4.7, 4.75, 4.8, 4.85, 4.9, 4.95, 5, 5.05, 5.1, 5.15, 5.2, 5.25, 5.3, 5.35, 5.4, 5.45, 5.5, 5.55, 5.6, 5.65, 5.7, 5.75, 5.8, 5.85, 5.9, 5.95, 6, 6.05, 6.1, 6.15, 6.2, 6.25, 6.3, 6.35, 6.4, 6.45, 6.5, 6.55, 6.6, 6.65, 6.7, 6.75, 6.8, 6.85, 6.9, 6.95, 7, 7.05, 7.1, 7.15, 7.2, 7.25, 7.3, 7.35]
.map((e) => {
let str = '' + e;
return str.includes('.') ? '' : str
});
console.log(data)
迭代整个列表。
有什么想法吗?
答案 0 :(得分:3)
使用Streams:
final List<String> ints = Arrays.asList("1", "2", "3", "4", "5", "6");
final int k = 2;
final List<String> result = IntStream.iterate(0, i -> i + 1).limit(ints.size() - k + 1)
.mapToObj(i -> ints.subList(i, i + k).stream().reduce("", (a, b) -> a + b + ""))
.collect(Collectors.toList());
System.out.println(result);3
使用for循环:
List<String> result = new LinkedList<>();
for(int i = 0 ; i < ints.size() - k + 1; i++) {
StringBuilder sb = new StringBuilder();
for(int j = 0; j < k; j++) {
sb.append(ints.get(i+j));
}
result.add(sb.toString());
}
System.out.println(result);
现在自己决定; - )
答案 1 :(得分:3)
如果您的结果中可以使用Collection<String>
代替List<String>
,那么您可以使用Java 9&#39; Collectors.flatMapping
:
Collection<String> result = IntStream.range(0, ints.size() - k)
.boxed()
.collect(Collectors.groupingBy(i -> i,
Collectors.flatMapping(i -> ints.subList(i, i + k).stream(),
Collectors.joining())))
.values();
另一种方式,类似于IEE1394's answer:
List<String> result = IntStream.range(0, ints.size() - k)
.mapToObj(i -> String.join("", ints.subList(i, i + k)))
.collect(Collectors.toList());