当前位置: 首页 > 工具软件 > jOOQ > 使用案例 >

JOOQ之Seq

和丰羽
2023-12-01

概述

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

压缩两个流到一个,源码:

/**
     * 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)

unzip

和上述zip作用相反,将一个stream解压为两个

Seq.unzip(Seq.of(tuple(1, "a"), tuple(2, "b"), tuple(3, "c")))

skip

和stream的skip用法一样,跳过指定数量返回seq

Seq<String> skip = Seq.of("张三", "李四", "王五","哈哈").skip(1);
ystem.out.println(skip);

输出:

李四王五哈哈

range

取指定范围为seq

Seq<Integer> range = Seq.range(1, 4);
System.out.println(range);

输出:

123

cycle

将seq重复一定的次数

Seq<Integer> range = Seq.range(1, 4);
System.out.println(range);
Seq<Integer> cycle = range.cycle(2);
System.out.println(cycle);

输出:

123
123123

groupBy

按照一定规则分为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]

grouped

和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)
 类似资料: