我有一个 Flux,我想将其转换为 List。我怎样才能做到这一点?
Flux<Object> getInstances(String serviceId); // Current one
List<Object> getInstances(String serviceId); // Demanded one
Run Code Online (Sandbox Code Playgroud)
Java 8 或反应式组件有一个准备好的方法将其映射或转换为 List ??
我应该使用.map()
final List<ServiceInstance> sis = convertedStringList.parallelStream()
.map( this.reactiveDiscoveryClient::getInstances )
// It should be converted to List<Object>
Run Code Online (Sandbox Code Playgroud) reactive-programming java-8 java-stream project-reactor reactive
我使用语法构建了一个 Antlr 4 过滤器(在此处的上下文中并不重要),过滤器看起来像“年龄 > 30 AND 高度 < 6.1”。
然而,问题是,我会构建一次这个过滤器,并用它来评估可能有一千个文档。每个文档中都有一个“年龄”和“身高”属性。
但是我不确定的是,如何重用解析器或词法分析器,以便我可以加快评估速度。每次都构建一个词法分析器 && 解析器似乎真的是在浪费时间。
java代码是这样的
public Boolean createFilterVisitor(String input, DocFieldAccessor docFieldAccessor) {
FilterLexer lexer = new FilterLexer(CharStreams.fromString(input));
lexer.removeErrorListener(ConsoleErrorListener.INSTANCE);
CommonTokenStream tokens = new CommonTokenStream(lexer);
FilterParser parser = new FilterParser(tokens);
parser.addErrorListener(new FilterErrorListener());
parser.removeErrorListener(ConsoleErrorListener.INSTANCE);
FilterVisitorImpl filterVisitor = new FilterVisitorImpl(docFieldAccessor);
return filterVisitor.visit(parser.filter());
}
Run Code Online (Sandbox Code Playgroud)
进而
for doc in docs:
createFilterVisitor(doc, someAccessor);
Run Code Online (Sandbox Code Playgroud)
我尝试构建一次词法分析器和解析器,然后在循环开始时执行 lexer.reset() 和 parser.reset()。它似乎有效(它过滤了合理的文档),但我不确定我是否做得正确。我不知道重置是什么意思,什么时候应该使用它
所以我的问题是:
我有这个代码。这行得通吗?
public class KalaFilter {
private final String filterClause;
private FilterLexer lexer;
private FilterParser parser;
@Getter
private …Run Code Online (Sandbox Code Playgroud) 我见过的大多数 Kotlin 示例和实际代码库都是通过常规列表执行操作的。
data class Person(val name: String, val age: Int)
fun main() {
val people = listOf(Person("John", 29), Person("Jane", 31))
people.filter { it.age > 30 }.map { it.name }
}
Run Code Online (Sandbox Code Playgroud)
在现实世界的场景中,使用序列而不是列表更有意义,反之亦然?
people.asSequence().filter { it.age > 30 }.map { it.name }
Run Code Online (Sandbox Code Playgroud)