用lambda表达式java实现计数变量
我有一个关于lambda表达式的问题。我有一个类对,它应该包含一个字符串和一个int Pair从文件中获取字符串。 int表示行号。 到目前为止,我有:用lambda表达式java实现计数变量,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我有一个关于lambda表达式的问题。我有一个类对,它应该包含一个字符串和一个int Pair从文件中获取字符串。 int表示行号。 到目前为止,我有: Stream<String> lineNumbers = Files.lines(Paths.get(fileName)); List<Integer> posStream = Stream.iterate(0, x -> x + 1).limit(lineNumbers.count()).collect
Stream<String> lineNumbers = Files.lines(Paths.get(fileName));
List<Integer> posStream = Stream.iterate(0, x -> x + 1).limit(lineNumbers.count()).collect(Collectors.toList());
lineNumbers.close();
Stream<String> line = Files.lines(Paths.get(fileName));
List<Pair> pairs = line.map((f) -> new Pair<>(f,1))
.collect(Collectors.toList());
pairs.forEach(f -> System.out.println(f.toString()));
line.close();
streamlinenumbers=Files.line(path.get(fileName));
List posStream=Stream.iterate(0,x->x+1).limit(lineNumbers.count()).collect(Collectors.toList());
linenumber.close();
streamline=Files.lines(path.get(fileName));
列表对=line.map((f)->新对(f,1))
.collect(Collectors.toList());
forEach(f->System.out.println(f.toString());
line.close();
我现在如何将文件编号输入到配对中?
是否有lambda表达式可以执行此操作?或者我还需要别的什么 int cnt=1;
int cnt = 1;
List<Pair> pairs = line.map((f) -> new Pair<>(f,cnt++))
.collect(Collectors.toList());
列表对=line.map((f)->新对(f,cnt++)
.collect(Collectors.toList());
我还没有尝试过,但可能会奏效。另一种功能方法是使用整数生成器压缩流列表 (我可以看到java8还没有,但它实际上是将两个列表中的每个单元格合并成一对列表,因此很容易实现)
您可以在java8中看到generator的示例,有几种方法可以做到这一点。所建议的计数器技术可以如下实现,使用
原子整数
作为可变计数器对象,并假设明显的对
类:
List<Pair> getPairs1() throws IOException {
AtomicInteger counter = new AtomicInteger(0);
try (Stream<String> lines = Files.lines(Paths.get(FILENAME))) {
return lines.parallel()
.map(line -> new Pair(line, counter.incrementAndGet()))
.collect(toList());
}
}
这是行不通的,因为lambda表达式需要一个final来执行它,所以我不能在lambda表达式中增加一个值,然后我想你不能使用lambda执行他想要的。无论如何,lambda不应该以可变的方式使用。这是我家庭作业中关于lambda表达式和流的一个小方法。你可以构建一个计数器对象,每次获取都增加值,声明它为final,并在lambda中使用它。根据定义,lambda是幂等的,这意味着如果您使用相同的参数多次调用它,它每次都将返回相同的结果。这就是为什么我说在lambda中增加一个值是反函数的。映射(arr->新整数(i.getAndIncrement())。。。。
static List<Pair> getPairs2() throws IOException {
List<String> lines = Files.readAllLines(Paths.get(FILENAME));
return IntStream.range(0, lines.size())
.parallel()
.mapToObj(i -> new Pair(lines.get(i), i+1))
.collect(toList());
}