使用Java的import supervisor
while True:
if supervisor.runtime.serial_bytes_available:
value = input().strip()
# Sometimes Windows sends an extra (or missing) newline - ignore them
if value == "":
continue
else:
print(value)
是一个有趣的难题。我有一个以Optional.flatMap()
或"foo:bar"
形式封装CURIE的类。我还有一个用于将前缀注册到名称空间以及跟踪默认名称空间的类。它有一个方法"bar"
返回一个findnamespaceByPrefix()
(因为前缀可能未注册)和一个方法Optional<URI>
,也返回了一个getDefaultNamespace()
(因为可能没有默认值)命名空间)。
给出一些CURIE,我想找到名称空间。使用这个很诱人:
Optional<URI>
但这是错误的。问题在于,即使有前缀但没有与该前缀关联的名称空间,它也会返回默认名称空间。如果CURIE中根本没有指定前缀,我们只想找回默认的名称空间。
这是一个解决方案:
Optional<URI> namespace = curie.getPrefix()
.flatMap(this::findnamespaceByPrefix)
.or(this::getDefaultNamespace);
我对此表示满意,但是使用三元运算符使我感到有些不正常,使用Optional<String> prefix = curie.getPrefix();
Optional<URI> namespace = prefix.isPresent()
? prefix.flatMap(this::findnamespaceByPrefix)
: getDefaultNamespace();
通常表示有更好的处理方法。
是否有任何Optional.isPresent()
专家都拥有更好的,更实用的解决方案来“短路”平面映射? (我有一种预感,我可以使用管道中的Optional
和Optional
用Optional:of
进行几层包装和展开Optional:get
,但是也许还有一些更优雅的方法?)