我将尝试从使用Java 8中的新
这是我正在阅读的内容:
我已经在https://www.regex101.com/上检查了正则表达式,它似乎工作正常。 此外,如果我只搜索
问题是当这些内容一起使用时,我得到了0个匹配项。 目前我的逻辑是读取一行,查看它属于哪个核心,然后获取它之前的数字。之后我想将它添加到一个列表中。
我在这里做错了什么?
Stream
时获取的行中提取特定文本。这是我正在阅读的内容:
46 [core1]
56 [core1]
45 [core1]
45 [core2]
67 [core2]
54 [core2]
这是我目前使用的代码:
Path path = Paths.get("./src/main/resources/", "data.txt");
try(Stream<String> lines = Files.lines(path)){
List<Integer> temps = new ArrayList<>();
lines
.filter(line -> line.contains("[core1]"))
.filter(line -> line.contains("(\\d+).*"))
.flatMapToInt(temperature -> IntStream.of(Integer.parseInt(temperature)))
.forEach(System.out::println);
System.out.print(temps.size());
}
我已经在https://www.regex101.com/上检查了正则表达式,它似乎工作正常。 此外,如果我只搜索
[core1]
字符串,它也能找到。问题是当这些内容一起使用时,我得到了0个匹配项。 目前我的逻辑是读取一行,查看它属于哪个核心,然后获取它之前的数字。之后我想将它添加到一个列表中。
我在这里做错了什么?
String#matches
而不是contains
... 但在调用parseInt
之前,你需要从行中提取整数。通过创建一个只有一个元素的IntStream
来调用flatMapToInt
并不是很有用。只需使用mapToInt
即可... - Alexis C..mapToInt(Integer::parseInt)
http://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#mapToInt-java.util.function.ToIntFunction- - Brett Okken