java怎样判断是否为八位数字_如何判断列表是否是java8流的另一个子序列?

真正的功能性解决方案,即不包含可变状态,很难找到.到目前为止所有答案都包含可变状态这一事实可以最好地说明这一点.

此外,没有List.indexOf(T对象,int startIndex)操作.为了说明它有多么有用,让我们通过辅助方法来定义它:

public static int indexOf(List> list, int startIndex, Object o) {

if(startIndex!=0) list=list.subList(startIndex, list.size());

int ix=list.indexOf(o);

return ix<0? -1: ix+startIndex;

}

如果这是一个问题,那么很容易找到没有临时对象的替代实现

现在,使用可变状态的简单解决方案是:

boolean allMatch = sequence.stream().allMatch(new Predicate() {

int index = 0;

public boolean test(Integer t) {

return (index = indexOf(global, index, t)) >=0;

}

});

没有可变状态的功能解决方案需要在两个列表中保持两个位置的值类型.当我们使用int [2]数组时,解决方案是:

boolean allMatch = Stream.iterate(

new int[]{ 0, global.indexOf(sequence.get(0)) },

a -> new int[] { a[0]+1, indexOf(global, a[1], sequence.get(a[0]+1)) }

)

.limit(sequence.size())

.allMatch(a -> a[1]>=0);

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

Copyright www.122dh.com Rights Reserved.