/** * Loads a SimplePreferenceData from a stream of user-item-value triples. * * @param <U> user type * @param <I> item type * @param tuples user-item-value triples * @return instance of SimplePreferenceData containing the information in the input */ public static <U, I> SimplePreferenceData<U, I> load(Stream<Tuple3<U, I, Double>> tuples) { return load((Stream<Tuple4<U, I, Double, Void>>) tuples.map(t -> t.concat((Void) null)), (u, i, v, o) -> new IdPref<>(i, v), (u, i, v, o) -> new IdPref<>(u, v)); }
/** * Loads an instance of the class from a stream of tuples possibly containing extra information. * * @param <U> type of user * @param <I> type of item * @param <O> type of additional information * @param tuples stream of user-item-value triples * @param uPrefFun creator of preference objects * @param iPrefFun creator of preference objects * @return a preference data object */ public static <U, I, O> SimplePreferenceData<U, I> load(Stream<Tuple4<U, I, Double, O>> tuples, Function4<U, I, Double, O, ? extends IdPref<I>> uPrefFun, Function4<U, I, Double, O, ? extends IdPref<U>> iPrefFun) { AtomicInteger numPreferences = new AtomicInteger(0); Map<U, List<IdPref<I>>> userMap = new HashMap<>(); Map<I, List<IdPref<U>>> itemMap = new HashMap<>(); tuples.forEach(t -> { numPreferences.incrementAndGet(); userMap.computeIfAbsent(t.v1, v1 -> new ArrayList<>()).add(uPrefFun.apply(t)); itemMap.computeIfAbsent(t.v2, v2 -> new ArrayList<>()).add(iPrefFun.apply(t)); }); return new SimplePreferenceData<>(userMap, itemMap, numPreferences.intValue()); } }
PreferenceData<Long, Long> trainData = SimplePreferenceData.load(SimpleRatingPreferencesReader.get().read(trainDataPath, lp, lp)); FeatureData<Long, String, Double> featureData = SimpleFeatureData.load(SimpleFeaturesReader.get().read(featurePath, lp, sp));
PreferenceData<Long, Long> trainData = SimplePreferenceData.load(SimpleRatingPreferencesReader.get().read(trainDataPath, lp, lp)); PreferenceData<Long, Long> testData = SimplePreferenceData.load(SimpleRatingPreferencesReader.get().read(testDataPath, lp, lp)); PreferenceData<Long, Long> totalData = new ConcatPreferenceData<>(trainData, testData);
PreferenceData<Long, Long> dataTrain = SimplePreferenceData.load(SimpleRatingPreferencesReader.get().read(trainDataPath, Parsers.lp, Parsers.lp)); PreferenceData<Long, Long> dataTest = SimplePreferenceData.load(SimpleRatingPreferencesReader.get().read(testDataPath, Parsers.lp, Parsers.lp)); dataTotal = new ConcatPreferenceData<>(dataTrain, dataTest);