Java与C#'的等价物;s';可枚举。任何';
在C#中,有一种方法可以通过使用Java与C#'的等价物;s';可枚举。任何';,java,if-statement,string-search,Java,If Statement,String Search,在C#中,有一种方法可以通过使用Enumerable来减少if语句的长度。任何都可以检查序列中的元素是否满足条件() 例如,而不是: If ( string.Contains(">") || string.Contains("<") || string.Contains("&") || string.Contains("l") || string.Contains("p") ) If(string.Contains(“>”)| | string.Contains(“”,”使
Enumerable来减少if语句的长度。任何都可以检查序列中的元素是否满足条件()
例如,而不是:
If ( string.Contains(">") || string.Contains("<") || string.Contains("&") || string.Contains("l") || string.Contains("p") )
If(string.Contains(“>”)| | string.Contains(“”,”使用Java 8,您可以编写如下内容:
if (Stream.of(">", "<", "&", "l", "p").anyMatch(string::contains)) {
...
}
代码:
@State(Scope.Benchmark)
@基准模式(模式平均时间)
公共类SO30940682{
@参数({“>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
@基准公共布尔流(){
返回流。对于使用Java 8的(“>”,“|,可以使用以下方法:
if(Stream.of(“>”,“如果没有Java8,您可以使用正则表达式来完成任务
string.matches(“^.*?(| p | 1 |&.*$”)
应该可以做到这一点
编辑:
我想知道哪个解决方案执行得更快。即使JIT可以内联所有lambda goodness,流
(s)可能比使用正则表达式慢。我可能完全错了,我希望Java 8的忠实拥护者能对此有所了解。看起来像是做了你想做的。@marcocierno String::contains引用一个不存在的静态方法。不好,我删除了注释。我错过了String
是一个静态方法的事实变量谢谢澄清。我想知道正则表达式检查子字符串是否比检查单个字符更快。我不确定是否包含()
在这些情况下性能很好。谢谢。这是一个完美的解决方案。如果人们不使用JAVA 8,Bruce Wayne使用正则表达式的解决方案可能会很有用。如果你真的想提高速度并只检查单个字符,你就要检查字符串中所有字符的单个循环中的所有几个字符。我想知道我的速度有多快与其他方法相比…只是为了完整性:您还可以使用.Any(string.Contains)
而不是更详细的.Any(w=>string.Contains(w))
在C#中。
if (Stream.of(">", "<", "&", "l", "p").anyMatch(string::contains)) {
...
}
Benchmark (s) Mode Samples Score Error Units
c.a.p.SO30940682.stream >aaaaaaaaaaaaaaaaaaaaa avgt 10 49.942 ± 1.936 ns/op
c.a.p.SO30940682.stream aaaaaaaaaaaaaaaaaaaaa> avgt 10 54.263 ± 1.927 ns/op
c.a.p.SO30940682.stream aaaaaaaaaaaaaaaaaaaaap avgt 10 131.537 ± 4.908 ns/op
c.a.p.SO30940682.stream paaaaaaaaaaaaaaaaaaaaa avgt 10 129.528 ± 7.352 ns/op
c.a.p.SO30940682.regex >aaaaaaaaaaaaaaaaaaaaa avgt 10 649.867 ± 27.142 ns/op
c.a.p.SO30940682.regex aaaaaaaaaaaaaaaaaaaaa> avgt 10 1047.122 ± 89.230 ns/op
c.a.p.SO30940682.regex aaaaaaaaaaaaaaaaaaaaap avgt 10 1029.710 ± 61.055 ns/op
c.a.p.SO30940682.regex paaaaaaaaaaaaaaaaaaaaa avgt 10 694.309 ± 32.675 ns/op
@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
public class SO30940682 {
@Param({">aaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaa>",
"aaaaaaaaaaaaaaaaaaaaap", "paaaaaaaaaaaaaaaaaaaaa"}) String s;
@Benchmark public boolean stream() {
return Stream.of(">", "<", "&", "l", "p").anyMatch(s::contains);
}
@Benchmark public boolean regex() {
return s.matches("^.*?(>|<|&|l|p).*$");
}
}
if (Stream.of(">", "<", "&", "l", "p").anyMatch(w -> string.contains(w))) {
}