diff --git a/src/main/java/org/redkale/source/FilterNode.java b/src/main/java/org/redkale/source/FilterNode.java index 6b6f61329..5f84d547e 100644 --- a/src/main/java/org/redkale/source/FilterNode.java +++ b/src/main/java/org/redkale/source/FilterNode.java @@ -9,6 +9,7 @@ import java.io.Serializable; import java.lang.reflect.Array; import java.util.*; import java.util.function.*; +import java.util.stream.Stream; import org.redkale.convert.ConvertColumn; import static org.redkale.source.FilterExpress.*; import org.redkale.util.*; @@ -79,6 +80,9 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 } else { exp = FilterExpress.IN; } + } else if (val instanceof Stream) { + val = ((Stream) val).toArray(); + exp = FilterExpress.IN; } } this.column = col; @@ -605,6 +609,14 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 return and(new FilterNode(column, IN, value)); } + public FilterNode in(String column, Stream stream) { + return and(new FilterNode(column, IN, stream == null ? null : (Serializable) stream.toArray())); + } + + public FilterNode in(String column, Collection collection) { + return and(new FilterNode(column, IN, (Serializable) collection)); + } + public FilterNode in(LambdaSupplier func) { return and(new FilterNode(LambdaSupplier.readColumn(func), IN, func.get())); } @@ -617,6 +629,14 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 return and(new FilterNode(column, NOT_IN, value)); } + public FilterNode notIn(String column, Stream stream) { + return and(new FilterNode(column, NOT_IN, stream == null ? null : (Serializable) stream.toArray())); + } + + public FilterNode notIn(String column, Collection collection) { + return and(new FilterNode(column, NOT_IN, (Serializable) collection)); + } + public FilterNode notIn(LambdaSupplier func) { return and(new FilterNode(LambdaSupplier.readColumn(func), NOT_IN, func.get())); } diff --git a/src/main/java/org/redkale/source/FilterNodes.java b/src/main/java/org/redkale/source/FilterNodes.java index 23f9e5491..172d24a7a 100644 --- a/src/main/java/org/redkale/source/FilterNodes.java +++ b/src/main/java/org/redkale/source/FilterNodes.java @@ -4,6 +4,8 @@ package org.redkale.source; import java.io.Serializable; +import java.util.Collection; +import java.util.stream.Stream; import static org.redkale.source.FilterExpress.*; import org.redkale.util.LambdaFunction; import org.redkale.util.LambdaSupplier; @@ -375,6 +377,14 @@ public final class FilterNodes { return new FilterNode(column, IN, value); } + public static FilterNode in(String column, Stream stream) { + return new FilterNode(column, IN, stream == null ? null : (Serializable) stream.toArray()); + } + + public static FilterNode in(String column, Collection collection) { + return new FilterNode(column, IN, (Serializable) collection); + } + public static FilterNode in(LambdaSupplier func) { return new FilterNode(LambdaSupplier.readColumn(func), IN, func.get()); } @@ -387,6 +397,14 @@ public final class FilterNodes { return new FilterNode(column, NOT_IN, value); } + public static FilterNode notIn(String column, Stream stream) { + return new FilterNode(column, NOT_IN, stream == null ? null : (Serializable) stream.toArray()); + } + + public static FilterNode notIn(String column, Collection collection) { + return new FilterNode(column, NOT_IN, (Serializable) collection); + } + public static FilterNode notIn(LambdaSupplier func) { return new FilterNode(LambdaSupplier.readColumn(func), NOT_IN, func.get()); } @@ -502,7 +520,7 @@ public final class FilterNodes { public static FilterNode fvdiv(LambdaFunction func, F value) { return new FilterNode(LambdaFunction.readColumn(func), FV_DIV, value); } - + //---------------------------------------------------------------------------------------------------- public static FilterJoinNode joinInner(Class joinClass, String joinColumn, String column, Serializable value) { return joinInner(joinClass, new String[]{joinColumn}, column, value); @@ -519,7 +537,7 @@ public final class FilterNodes { public static FilterJoinNode joinInner(Class joinClass, String[] joinColumns, String column, FilterExpress express, Serializable value) { return new FilterJoinNode(FilterJoinType.INNER, joinClass, joinColumns, column, express, value); } - + //---------------------------------------------------------------------------------------------------- static FilterExpress oldExpress(FilterExpress express) { switch (express) {