/* XXL: The eXtensible and fleXible Library for data processing Copyright (C) 2000-2011 Prof. Dr. Bernhard Seeger Head of the Database Research Group Department of Mathematics and Computer Science University of Marburg Germany This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; If not, see <http://www.gnu.org/licenses/>. http://code.google.com/p/xxl/ */ package xxl.core.xxlinq.usecases; import static xxl.core.xxlinq.columns.ColumnUtils.*; import java.util.Arrays; import java.util.List; import xxl.core.functions.Functional; import xxl.core.relational.tuples.Tuple; import xxl.core.xxlinq.AdvTupleCursor; public class SelectIndexed extends XXLinqExample { // LINQ Example: http://msdn.microsoft.com/en-us/vcsharp/aa336758#SelectIndexed @Override public void executeXXLinq() { final class Pair<X,Y> { public X num; public Y inPlace; public String toString() { return "(" + num + ", " + inPlace + ")"; } } List<Integer> numbers = Arrays.asList(5,4,1,3,9,8,6,7,2,0); AdvTupleCursor tupleCursor = new AdvTupleCursor( numbers.iterator(), "numbers") .select(indexCol("index"), col("value")) .select(NewLINQFunctions.tupleFunction("NumInPLace", new Functional.UnaryFunction<Tuple,Pair<Integer,Boolean>>(){ @Override public Pair<Integer, Boolean> invoke(Tuple tuple) { Pair<Integer,Boolean> ret = new Pair<Integer,Boolean>(); ret.num = (Integer) tuple.getObject(2); ret.inPlace = ret.num.longValue() == (Long)tuple.getObject(1); return ret; }})); printExample(tupleCursor); } }