Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
 
 
 package org.apache.mahout.cf.taste.impl.model;
 
 
 import java.util.List;

This implementation maintains two parallel arrays, of user IDs and values. The idea is to save allocating org.apache.mahout.cf.taste.model.Preference objects themselves. This saves the overhead of org.apache.mahout.cf.taste.model.Preference objects but also duplicating the user ID value.

 
 public final class GenericUserPreferenceArray implements PreferenceArray {
 
   private static final int ITEM = 1;
   private static final int VALUE = 2;
   private static final int VALUE_REVERSED = 3;
 
   private final long[] IDs;
   private long id;
   private final float[] values;
 
   public GenericUserPreferenceArray(int size) {
     if (size < 1) {
       throw new IllegalArgumentException("size is less than 1");
     }
     this. = new long[size];
      = new float[size];
   }
 
   public GenericUserPreferenceArray(List<Preferenceprefs) {
     this(prefs.size());
     for (int i = 0; i < prefs.size(); i++) {
       Preference pref = prefs.get(i);
       [i] = pref.getItemID();
       [i] = pref.getValue();
     }
      = prefs.get(0).getUserID();
   }

  
This is a private copy constructor for clone().
 
   private GenericUserPreferenceArray(long[] IDslong idfloat[] values) {
     this. = IDs;
     this. = id;
     this. = values;
   }
 
   @Override
   public int length() {
     return .;
   }
 
   @Override
   public Preference get(int i) {
     return new PreferenceView(i);
   }
 
   @Override
   public void set(int iPreference pref) {
      = pref.getUserID();
     [i] = pref.getItemID();
     [i] = pref.getValue();
   }
 
   @Override
   public long getUserID(int i) {
     return ;
   }

  
Note that this method will actually set the user ID for all preferences.
 
  public void setUserID(int ilong userID) {
     = userID;
  }
  public long getItemID(int i) {
    return [i];
  }
  public void setItemID(int ilong itemID) {
    [i] = itemID;
  }
  public float getValue(int i) {
    return [i];
  }
  public void setValue(int ifloat value) {
    [i] = value;
  }
  public void sortByUser() {
  }
  public void sortByItem() {
  }
  public void sortByValue() {
  }
  public void sortByValueReversed() {
  }
  public boolean hasPrefWithUserID(long userID) {
    return  == userID;
  }
  public boolean hasPrefWithItemID(long itemID) {
    for (long id : ) {
      if (itemID == id) {
        return true;
      }
    }
    return false;
  }
  private void selectionSort(int type) {
    // I think this sort will prove to be too dumb, but, it's in place and OK for tiny, mostly sorted data
    int max = length();
    boolean sorted = true;
    for (int i = 1; i < maxi++) {
      if (isLess(ii-1, type)) {
        sorted = false;
        break;
      }
    }
    if (sorted) {
      return;
    }
    for (int i = 0; i < maxi++) {
      int min = i;
      for (int j = i + 1; j < maxj++) {
        if (isLess(jmintype)) {
          min = j;
        }
      }
      if (i != min) {
        swap(imin);
      }
    }
  }
  private boolean isLess(int iint jint type) {
    switch (type) {
      case :
        return [i] < [j];
      case :
        return [i] < [j];
      case :
        return [i] >= [j];
      default:
        throw new IllegalStateException();
    }
  }
  private void swap(int iint j) {
    long temp1 = [i];
    float temp2 = [i];
    [i] = [j];
    [i] = [j];
    [j] = temp1;
    [j] = temp2;
  }
    return new GenericUserPreferenceArray(.clone(), .clone());
  }
  public Iterator<Preferenceiterator() {
    return new PreferenceArrayIterator();
  }
  private final class PreferenceArrayIterator implements Iterator<Preference> {
    private int i = 0;
    @Override
    public boolean hasNext() {
      return  < length();
    }
    @Override
    public Preference next() {
      if ( >= length()) {
        throw new NoSuchElementException();
      }
      return new PreferenceView(++);
    }
    @Override
    public void remove() {
      throw new UnsupportedOperationException();
    }
  }
  private final class PreferenceView implements Preference {
    private final int i;
    private PreferenceView(int i) {
      this. = i;
    }
    @Override
    public long getUserID() {
      return GenericUserPreferenceArray.this.getUserID();
    }
    @Override
    public long getItemID() {
      return GenericUserPreferenceArray.this.getItemID();
    }
    @Override
    public float getValue() {
      return [];
    }
    @Override
    public void setValue(float value) {
      [] = value;
    }
  }
New to GrepCode? Check out our FAQ X