java - 从数据集中读取并放入对象中

标签 java arrays oop object dataset

我有一个外部数据集,其中填充了以下数据:userid、itemid、Rating。我想将此数据读入每个用户的用户首选项对象中。 userpreference 对象包含一个 userid、一个 itemid 数组和一个 ratings 数组。我选择阵列是因为性能需要尽可能快。我尝试在没有对象的情况下做到这一点,并使用二维数组代替。这可行,但我希望它是 OOP 并使用对象。我一直坚持将数据放入对象中。

数据集的示例是:
1,101,2.5
1,106,3.0
2,101,3.0
4,106,4.5
4,103,3.0
1,103,3.0
1,104,3.5
5,102,4.0

我的代码是什么样的

public class Main {
        public static void main(String[] args) throws IOException{ 
        //UserPreference bestaat uit userid, itemid[] en preferences[].     
        UserPreference [][] rating = new UserPreference[8][107];

        int[][] userPref = new int[8][107]; //2d array test

        BufferedReader br = new BufferedReader(new FileReader("userinfo.data"));
        String line = null;

        while ((line = br.readLine()) != null) {

            String[] userratings = line.split(",");
            int userColumn = Integer.parseInt(userratings[0]);
            int itemColumn = Integer.parseInt(userratings[1]);
            double ratingColumn = Double.parseDouble(userratings[2]);            

            System.out.println(userColumn + " " + itemColumn + " " + ratingColumn);

            rating[userColumn][itemColumn] = ratingColumn;  

            userPref[userColumn][itemColumn] = (int) ratingColumn; //2d array test

        }           
        br.close();

        System.out.println("Rating: " + userPref[1][101]); // this works as an example, but not OO and reads out as an int instead of a double
        System.out.println("Rating: " + rating[1][101]); //this does not work, because ratingcolumn is no object.
    } }

评级列未被识别为对象。我尝试像以前使用过的二维数组一样进行操作,但效果不一样。我希望有人能帮助我朝正确的方向前进。

问候,

阿尔弗雷德

最佳答案

面向对象的解决方案可能是:

    public static void main(final String[] args) throws IOException {
        HashMap<Integer, User> users = new HashMap<Integer, User>();
        BufferedReader br = new BufferedReader(new FileReader("userinfo.data"));
        String line = null;
        while ((line = br.readLine()) != null) {
            String[] userratings = line.split(",");
            int userColumn = Integer.parseInt(userratings[0]);
            int itemColumn = Integer.parseInt(userratings[1]);
            double ratingColumn = Double.parseDouble(userratings[2]);
            User user = users.get(userColumn);
            if (user == null) {
                user = new User(userColumn);
                users.put(userColumn, user);
            }
            user.add(new Item(itemColumn, ratingColumn));
        }
        br.close();

        for (User user : users.values()) {
            for (Item item : user.getItems()) {
                System.out.println(user.getId() + "\t" + item.getId() + "\t" + item.getRating());
            }
        }
    }

有了这两个类:

public class User {
    int id;
    ArrayList<Item> items;

    public User(final int id) {
        this.id = id;
        items = new ArrayList<Item>();
    }

    public int getId() {
        return id;
    }

    public void setId(final int id) {
        this.id = id;
    }

    public void add(final Item item) {
        items.add(item);
    }

    public ArrayList<Item> getItems() {
        return items;
    }
}



public class Item {
    int id;
    double rating;

    public Item(final int id, final double rating) {
        this.id = id;
        this.rating = rating;
    }

    public int getId() {
        return id;
    }

    public void setId(final int id) {
        this.id = id;
    }

    public double getRating() {
        return rating;
    }

    public void setRating(final double rating) {
        this.rating = rating;
    }

}

关于java - 从数据集中读取并放入对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28550985/

相关文章:

python - 从2D numpy数组中删除特定行值的数组的快速方法

arrays - 空数组情况是否需要 if 语句?

c++ - 通用数组/指针数据类型

php - 面向对象关系

java - 是否可以根据索引来识别对象?

java - 从 Android 中的自定义对象动态更新 textView

java - 我的 Spring Boot 应用程序容器无法连接到我的 postgresql 数据库

java - 无法初始化类 com.example.testapp.SomeHelper

java - 确定父类对象的子类类型

python 如何将一个类的实例变量获取到另一个类?