org.jooq.lambda下的 一个顺序的、有序的 Stream,它添加了各种有用的方法,这些方法之所以有效,是因为它是顺序的和有序的。
其很大一部分方法和stream类似,用法也一样,这里就不做介绍。主要介绍几个少见的且有用的。
学习stream相关方法,点这里
Seq.seq(…),里面可以是数组、List、Set、Stream流等类型都可以。经常用到的静态方法如下:
static <T> Seq<T> seq(Iterable<? extends T> iterable) {
if (iterable == null)
return Seq.empty();
return seq(iterable.iterator());
}
static <T> Seq<T> seq(Stream<? extends T> stream) {
if (stream == null)
return Seq.empty();
if (stream instanceof Seq)
return (Seq<T>) stream;
return new SeqImpl<>(stream);
}
static <T> Seq<T> seq(T[] values, int startIndex, int endIndex) {
return seq(Arrays.asList(values).subList(startIndex, endIndex));
}
static <T> Seq<T> of(T... values) {
return seq(Stream.of(values));
}
压缩两个流到一个,源码:
/** * Zip two streams into one. * <p> * <code><pre> * // (tuple(1, "a"), tuple(2, "b"), tuple(3, "c")) * Seq.of(1, 2, 3).zip(Seq.of("a", "b", "c")) * </pre></code> * * @see #zip(Stream, Stream) */ default <U> Seq<Tuple2<T, U>> zip(Seq<? extends U> other) { return zip(this, other); }
demo:
Seq<Tuple2<String, Integer>> zip = Seq.of("张三", "李四", "王五").zip(Seq.of(24, 25, 27));
System.out.println(zip);
输出:
(张三, 24)(李四, 25)(王五, 27)
和上述zip作用相反,将一个stream解压为两个
Seq.unzip(Seq.of(tuple(1, "a"), tuple(2, "b"), tuple(3, "c")))
和stream的skip用法一样,跳过指定数量返回seq
Seq<String> skip = Seq.of("张三", "李四", "王五","哈哈").skip(1);
ystem.out.println(skip);
输出:
李四王五哈哈
取指定范围为seq
Seq<Integer> range = Seq.range(1, 4);
System.out.println(range);
输出:
123
将seq重复一定的次数
Seq<Integer> range = Seq.range(1, 4);
System.out.println(range);
Seq<Integer> cycle = range.cycle(2);
System.out.println(cycle);
输出:
123
123123
按照一定规则分为map
//1...7这七个数按照 奇偶数分为map,第一个为奇数或者偶数的数字为key---其他符合条件的为value
Map<Integer, List<Integer>> integerListMap = Seq.range(1, 8).groupBy(i -> i % 2);
输出:
0, [2, 4, 6]
1, [1, 3, 5, 7]
和groupBy有点类似,只不过其返回值是Seq格式
// Seq(tuple(1, Seq(1, 3, 5)), tuple(0, Seq(2, 4, 6)))
Seq.of(1, 2, 3, 4, 5, 6).grouped(i -> i % 2)
// Seq(tuple(true, Seq(1, 3, 5)), tuple(false, Seq(2, 4, 6)))
Seq.of(1, 2, 3, 4, 5, 6).grouped(i -> i % 2 != 0)