使用生成器在 java 中生成元组

use Generator for generating Tuples in java

我正在尝试掌握新的 java8 流。

我需要生成具有某些特征的无限元组流:

元组将具有三个 int 值,abc

其中 bc 只是计数器,可以在 for 循环中使用:

for (int c = 1;; c++) {
    for (int b = 1; b < c; b++) {
        ...
    }
}

然后我会使用过滤器来计算 a

我创建了一个TupleFactory

class TupleFactory {
    private static int b = 1;
    private static int c = 1;

    public static Tuple next(){
        if (b >= c - 1)
            c++;
        else
            b++;
        return new MyTuple (1,b,c);
    }
}

然后我想生成Stream<Tuple>

Supplier<Tuple> anyTuple = s -> TupleFactory.next();
Stream<Tuple> result = Stream.generate(anyTuple);

我得到一个:

Lambda expression's signature does not match the signature of the functional interface method get()

在我定义供应商的行中...

有什么线索吗?

首先,删除 TupleFactory 中 static 的每个实例。使用 static 是胡说八道。

然后,试试这个:

TupleFactory myFactory = new TupleFactory();
Supplier<Tuple> anyTuple = myFactory::next;

如果您不想修复您的 static,那么这应该可行:

Supplier<Tuple> anyTuple = TupleFactory::next;

您的 lambda 必须为

提供正文
T get();

Supplier<T> 接口中的方法并处理所有此方法参数。但在这种情况下 get 方法没有任何参数,因此 s -> ... 中不需要 s。而不是

Supplier<Tuple> anyTuple = s -> TupleFactory.next();

使用

Supplier<Tuple> anyTuple = () -> TupleFactory.next();
//                         ^^ - means no arguments

或者更简单的使用 method references

Supplier<Tuple> anyTuple = TupleFactory::next;