jsr223 java,JMeter-无法在JSR223脚本中使用Java流

I can't use Java stream inside JSR223 script in JMeter,

I tried with Java stream

List myList =

Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList

.stream()

.filter(s -> s.startsWith("c"))

.map(String::toUpperCase)

.sorted()

.forEach(System.out::println);

With exception

2019-04-22 13:44:49,808 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

Script9.groovy: 6: unexpected token: -> @ line 6, column 15.

.filter(s -> s.startsWith("c"))

^

1 error

javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

Script9.groovy: 6: unexpected token: -> @ line 6, column 15.

.filter(s -> s.startsWith("c"))

^

1 error

at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.compile(GroovyScriptEngineImpl.java:187) ~[groovy-all-2.4.16.jar:2.4.16]

at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:217) ~[ApacheJMeter_core.jar:5.1.1 r1855137]

at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:71) [ApacheJMeter_java.jar:5.1.1 r1855137]

at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622) [ApacheJMeter_core.jar:5.1.1 r1855137]

at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546) [ApacheJMeter_core.jar:5.1.1 r1855137]

at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486) [ApacheJMeter_core.jar:5.1.1 r1855137]

at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253) [ApacheJMeter_core.jar:5.1.1 r1855137]

def sample = ['Groovy', 'Gradle', 'Grails', 'Spock'] as String[]

def result = sample.stream() // Use stream() on array objects

.filter { s -> s.startsWith('Gr') }

.map { s -> s.toUpperCase() }

.toList() // toList() added to Stream by Groovy

With exception:

019-04-22 13:42:40,345 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.String;.stream() is applicable for argument types: () values: []

Possible solutions: grep(), size(), sort(), sum(), grep(), head()

javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: [Ljava.lang.String;.stream() is applicable for argument types: () values: []

Possible solutions: grep(), size(), sort(), sum(), grep(), head()

at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16]

at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16]

at javax.script.CompiledScript.eval(Unknown Source) ~[?:1.8.0_191]

Lambda expressions still not supported in beanshell

解决方案

Groovy does not support lambda however you can replace lambda with Closure like below:

​List myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

myList.stream()

.filter{s -> s.startsWith("c")}

.map{s-> s.toUpperCase()}

.sorted()

.forEach{s->println s};​

Output:

C1

C2

Your second case gives you the error as the sample is an Array and stream() is not available on Array. You can get stream by Arrays.stream(array).

import java.util.stream.Collectors;

def sample = ['Groovy', 'Gradle', 'Grails', 'Spock'] as String[]

def result = Arrays.stream(sample )

.filter { s -> s.startsWith('Gr') }

.map { s -> s.toUpperCase() }

.collect(Collectors.toList())​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值