我正在尝试生成格式为*.*.*.*
的特定字符串,可以说QUEUE1.NONE.QUEUE3.NONE
。具体来说,这是我的Rabbitmq的路由键,用于根据事件集合确定哪个队列接收特定事件,因此SET1
将包含QUEUE1
等的事件。
以下是我想出的内容,但我认为它太冗长了,是否有使用流进行此操作的更有效方法?
使用flatmap
的问题是,如果它在不同的集合中,我必须返回一个不同的值,而flatmap
只是合并集合。
return Optional.ofNullable(eventName).map(event->{
StringBuffer sb = new StringBuffer()
.append(Optional.of(event).filter(SET1::contains).map(t -> VALUE1).orElse(SKIP)).append(DELIMITER)
.append(Optional.of(event).filter(SET2::contains).map(t -> VALUE2).orElse(SKIP)).append(DELIMITER)
.append(Optional.of(event).filter(SET3::contains).map(t -> VALUE3).orElse(SKIP)).append(DELIMITER)
.append(Optional.of(event).filter(SET4::contains).map(t -> VALUE4).orElse(SKIP));
return sb.toString();
答案 0 :(得分:1)
您可以这样做
List<Set<String>> sets = Arrays.asList(SET1, SET2, SET3, SET4);
List<String> VALUES = Arrays.asList(VALUE1, VALUE2, VALUE3, VALUE4);
String eventDests = IntStream.range(0, 4)
.mapToObj(i -> sets.get(i).contains(event) ? VALUES.get(i) : SKIP)
.collect(Collectors.joining(DELIMITER));
答案 1 :(得分:1)
您不必要地使选件复杂化。为什么不保持简单?
...
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
"@babel/preset-env",
"@babel/preset-react",
{
"plugins": [
["relay", {"schema": "./graphql_schema_builds/private/venue/schema.graphql"}],
"ramda"
]
}
]
}
}
},
...