mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-27 21:01:15 +08:00
#314 added duplicate removal to QTuple
This commit is contained in:
parent
b9b832bbe1
commit
eb84f97f25
@ -13,9 +13,11 @@
|
||||
*/
|
||||
package com.mysema.query.types;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mysema.query.Tuple;
|
||||
@ -34,6 +36,8 @@ import com.mysema.query.Tuple;
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* Duplicate expressions are removed in the constructor.
|
||||
*
|
||||
* @author tiwe
|
||||
*
|
||||
*/
|
||||
@ -99,8 +103,15 @@ public class QTuple extends ExpressionBase<Tuple> implements FactoryExpression<T
|
||||
* @param args
|
||||
*/
|
||||
public QTuple(Expression<?>... args) {
|
||||
super(Tuple.class);
|
||||
this.args = ImmutableList.copyOf(args);
|
||||
super(Tuple.class);
|
||||
Set<Expression<?>> set = new HashSet<Expression<?>>(args.length);
|
||||
ImmutableList.Builder<Expression<?>> builder = ImmutableList.builder();
|
||||
for (Expression<?> arg : args) {
|
||||
if (set.add(arg)) {
|
||||
builder.add(arg);
|
||||
}
|
||||
}
|
||||
this.args = builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -108,9 +119,16 @@ public class QTuple extends ExpressionBase<Tuple> implements FactoryExpression<T
|
||||
*
|
||||
* @param args
|
||||
*/
|
||||
public QTuple(List<Expression<?>> args) {
|
||||
public QTuple(List<? extends Expression<?>> args) {
|
||||
super(Tuple.class);
|
||||
this.args = args;
|
||||
ImmutableList.Builder<Expression<?>> builder = ImmutableList.builder();
|
||||
for (int i = 0; i < args.size(); i++) {
|
||||
Expression<?> arg = args.get(i);
|
||||
if (args.indexOf(arg) == i) {
|
||||
builder.add(arg);
|
||||
}
|
||||
}
|
||||
this.args = builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -120,10 +138,11 @@ public class QTuple extends ExpressionBase<Tuple> implements FactoryExpression<T
|
||||
*/
|
||||
public QTuple(Expression<?>[]... args) {
|
||||
super(Tuple.class);
|
||||
this.args = new ArrayList<Expression<?>>();
|
||||
Set<Expression<?>> argsSet = new LinkedHashSet<Expression<?>>();
|
||||
for (Expression<?>[] exprs: args){
|
||||
this.args.addAll(Arrays.asList(exprs));
|
||||
argsSet.addAll(Arrays.asList(exprs));
|
||||
}
|
||||
this.args = ImmutableList.copyOf(argsSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -80,4 +80,18 @@ public class QTupleTest {
|
||||
QTuple expr = new QTuple(str1, str2);
|
||||
assertEquals(expr.newInstance("str1", "str2").hashCode(), expr.newInstance("str1", "str2").hashCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void Duplicates() {
|
||||
QTuple expr = new QTuple(str1, str1);
|
||||
assertEquals(1, expr.getArgs().size());
|
||||
assertEquals(str1, expr.getArgs().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void Duplicates2() {
|
||||
QTuple expr = new QTuple(Arrays.asList(str1, str1));
|
||||
assertEquals(1, expr.getArgs().size());
|
||||
assertEquals(str1, expr.getArgs().get(0));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user