使用生成器在 java 中生成元组
use Generator for generating Tuples in java
我正在尝试掌握新的 java8 流。
我需要生成具有某些特征的无限元组流:
元组将具有三个 int
值,a
、b
和 c
。
其中 b
和 c
只是计数器,可以在 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;
我正在尝试掌握新的 java8 流。
我需要生成具有某些特征的无限元组流:
元组将具有三个 int
值,a
、b
和 c
。
其中 b
和 c
只是计数器,可以在 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;