这是我的内容Jenkinsfile
:
node {
// prints only the first element 'a'
[ 'a', 'b', 'c' ].each {
echo it
}
}
Run Code Online (Sandbox Code Playgroud)
在Jenkins中执行作业时(使用Pipeline插件),仅打印列表中的第一个项目.
有人能解释我这种奇怪的行为吗?这是一个错误吗?或者只是我不理解Groovy语法?
编辑:for (i in items)
按预期工作:
node {
// prints 'a', 'b' and 'c'
for (i in [ 'a', 'b', 'c' ]) {
echo i
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试向受IAM访问策略保护的AWS Elasticsearch域发出HTTP请求.我需要签署这些请求,以便AWS授权这些请求.我正在使用Jest,后者又使用Apache HttpComponents Client.
这似乎是一个常见的用例,我想知道是否有某种类型的库,我可以在Apache HttpComponents客户端上使用它来签署所有请求.
java amazon-web-services elasticsearch apache-httpcomponents jest
我认为这是一项简单的任务,但我是 regex 的新手,所以无法弄清楚。我想过滤一个包含以下内容的列表:“ANY”-“ANY”-“ANY”
输入:
List1 = ["AB.22-01-01", "AB.33-01-44", "--4", "AA.44--05", "--"]
Run Code Online (Sandbox Code Playgroud)
输出:
List2 = ["AB.22-01-01", "AB.33-01-44"]
Run Code Online (Sandbox Code Playgroud)
每个项目将包含两个“-”,但我只想获取“-”两侧带有文本的项目。
我需要逃避一个特殊字符String
.
Guava提供了这个Escaper
类,它正是这样做的:
Escaper escaper = Escapers.builder()
.addEscape('[', "\\[")
.addEscape(']', "\\]")
.build();
String escapedStr = escaper.escape("This is a [test]");
System.out.println(escapedStr);
// -> prints "This is a \[test\]"
Run Code Online (Sandbox Code Playgroud)
现在我有一个逃脱String
,我需要解除它,我在番石榴找不到任何东西来做这件事.
我期待Escaper
有一种unescape()
方法,但事实并非如此.
编辑:我知道在一些非意义的情况下,取消内容可能很棘手,甚至是不可能的.
例如,这种Escaper
用法可能导致含糊不清:
Escaper escaper = Escapers.builder()
.addEscape('@', " at ")
.addEscape('.', " dot ")
.build();
Run Code Online (Sandbox Code Playgroud)
除非转义的数据仅包含电子邮件地址,否则您无法通过取消它来安全地获取数据.
Escaper
HTML实体安全使用的一个很好的例子:
Escaper escaper = Escapers.builder()
.addEscape('&', "&")
.addEscape('<', "<")
.addEscape('>', ">")
.build();
Run Code Online (Sandbox Code Playgroud)
在这里,您可以安全地转义任何文本,将其合并到HTML页面中并随时取消它以显示它,因为您涵盖了所有可能的含糊之处.
总之,我不明白为什么unescaping是如此有争议.我认为开发者有责任正确使用这个类,了解他的数据并避免含糊不清.根据定义,转义意味着您最终需要进行转换.否则,它是混淆或其他一些概念.
我是RxJava的新手.
我正在尝试按给定键对元素进行分组,并获取每个键的第一个值.
例如,按照第一个字母对这些名称进行分组,并为每个组打印第一个名称:
Observable<String> names = Observable.just(
"John", "Steve", "Ruth",
"Sam", "Jane", "James");
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的:
第一次尝试:
names.groupBy(s -> s.charAt(0))
.flatMap(grp -> grp.first())
.subscribe(s -> System.out.println(s));
Run Code Online (Sandbox Code Playgroud)
失败!:打印所有名称.
第二次尝试:
names.groupBy(s -> s.charAt(0))
.subscribe(grp -> grp
.first()
.subscribe(System.out::println));
Run Code Online (Sandbox Code Playgroud)
再次失败!:所有名字仍然印有......
我设法通过减少每个GroupedObservable来获得预期的结果:
第一次尝试,减少:
names.groupBy(s -> s.charAt(0))
.flatMap(grp -> grp.reduce((a, b) -> a))
.subscribe(s -> System.out.println(s));
Run Code Online (Sandbox Code Playgroud)
第二次尝试,减少:
names.groupBy(s -> s.charAt(0))
.subscribe(grp -> grp
.reduce((a, b) -> a)
.subscribe(System.out::println));
Run Code Online (Sandbox Code Playgroud)
但这种解决方案并不理想.在现实世界中,这将涉及一些昂贵的计算,并且reduce()
操作员将比first()
操作员(通过键仅计算1个值)花费更长的时间来计算(计算所有值).
我的应用程序中有一个ArrayIndexOutofBounds异常.我想在我的应用程序中放置一个前一个按钮.我的数组中有5个元素按钮循环.如何在用户点击元素[0]时这样做,它将循环回元素[4]而不是转到[-1]导致异常?
我的代码如下:
mPrevButton = (ImageButton)findViewById(R.id.prev_button);
mPrevButton.setOnClickListener (new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurrentIndex = (mCurrentIndex - 1) % mQuestionBank.length;
mIsCheater = false;
updateQuestion();
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么:
mCurrentIndex = (mCurrentIndex - 1) % mQuestionBank.length;
Run Code Online (Sandbox Code Playgroud)