/* * Copyright (C) 2016 RankSys http://ranksys.org * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.ranksys.fast.preference; import es.uam.eps.ir.ranksys.core.preference.IdPref; import es.uam.eps.ir.ranksys.fast.index.FastItemIndex; import es.uam.eps.ir.ranksys.fast.index.FastUserIndex; import es.uam.eps.ir.ranksys.fast.preference.AbstractFastPreferenceData; import es.uam.eps.ir.ranksys.fast.preference.IdxPref; import it.unimi.dsi.fastutil.doubles.DoubleIterator; import it.unimi.dsi.fastutil.ints.IntIterator; import java.util.function.Function; import org.ranksys.core.util.iterators.StreamDoubleIterator; import org.ranksys.core.util.iterators.StreamIntIterator; /** * Extends AbstractFastPreferenceData and implements the data access iterator-based methods * using the stream-based ones. Avoids duplicating code where stream-based methods * are preferred. * * @author Saúl Vargas (Saul@VargasSandoval.es) * @param <U> user type * @param <I> item type */ public abstract class StreamsAbstractFastPreferenceData<U, I> extends AbstractFastPreferenceData<U, I> { /** * Constructor with default IdxPref to IdPref converter. * * @param userIndex user index * @param itemIndex item index */ public StreamsAbstractFastPreferenceData(FastUserIndex<U> userIndex, FastItemIndex<I> itemIndex) { super(userIndex, itemIndex); } /** * Constructor with custom IdxPref to IdPref converter. * * @param userIndex user index * @param itemIndex item index * @param uPrefFun user IdxPref to IdPref converter * @param iPrefFun item IdxPref to IdPref converter */ public StreamsAbstractFastPreferenceData(FastUserIndex<U> userIndex, FastItemIndex<I> itemIndex, Function<IdxPref, IdPref<I>> uPrefFun, Function<IdxPref, IdPref<U>> iPrefFun) { super(userIndex, itemIndex, uPrefFun, iPrefFun); } @Override public IntIterator getUidxIidxs(int uidx) { return new StreamIntIterator(getUidxPreferences(uidx).mapToInt(IdxPref::v1)); } @Override public DoubleIterator getUidxVs(int uidx) { return new StreamDoubleIterator(getUidxPreferences(uidx).mapToDouble(IdxPref::v2)); } @Override public IntIterator getIidxUidxs(int iidx) { return new StreamIntIterator(getIidxPreferences(iidx).mapToInt(IdxPref::v1)); } @Override public DoubleIterator getIidxVs(int iidx) { return new StreamDoubleIterator(getIidxPreferences(iidx).mapToDouble(IdxPref::v2)); } @Override public boolean useIteratorsPreferentially() { return false; } }