Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按值查询番石榴表_Java_Collections_Guava - Fatal编程技术网

Java 按值查询番石榴表

Java 按值查询番石榴表,java,collections,guava,Java,Collections,Guava,我正在从CSV文件创建一个表,其中包含不同项目的用户评分数据 我使用以下代码来填充表格 Reader in=newfilereader(OriginalRatingDataPath); Iterable records=CSVFormat.EXCEL.withHeader().parse(in); Table ratings=HashBasedTable.create(); 用于(CSVRecord记录:记录){ ratings.put(Integer.parseInt(record.get(

我正在从CSV文件创建一个表,其中包含不同项目的用户评分数据

我使用以下代码来填充表格

Reader in=newfilereader(OriginalRatingDataPath);
Iterable records=CSVFormat.EXCEL.withHeader().parse(in);
Table ratings=HashBasedTable.create();
用于(CSVRecord记录:记录){
ratings.put(Integer.parseInt(record.get(“userID”))、Integer.parseInt(record.get(“itemID”)、Integer.parseInt(record.get(“rating”));

}
选项1

表的作用是允许您按行或列访问记录。因此,如果您需要通过分级访问,最简单的方法是将分级作为列使用

Reader in = new FileReader(OriginalRatingDataPath);
Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);

Table<Integer,Integer,Integer> ratings = HashBasedTable.create();
for (CSVRecord record : records) {
    ratings.put(Integer.parseInt(record.get("userID")), Integer.parseInt(record.get("rating")), Integer.parseInt(record.get("itemID")));
}

// Copy column 3 to a new map to prevent editing the table itself
// when adding columns 4 and 5 - in turn preventing a memory leak
// from indirectly holding onto `ratings` through the map
Map<Integer, Integer> usersToItemId = new HashMap<>(ratings.column(3));
usersToItemId.putAll(ratings.column(4));
usersToItemId.putAll(ratings.column(5));

// To get just User IDs
Set<Integer> userIds = usersToItemId.keySet();
通过cellSet()的流


欢迎来到StackOverflow。虽然这个解释可能会解决这个问题,包括一个如何以及为什么解决这个问题的示例代码将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。我建议您编辑您的答案,添加一些代码示例,谢谢!
// Your current code

Set<Integer> userIds = new HashSet<>();
for (Table.Cell<Integer, Integer, Integer> cell : ratings.cellSet()) {
    if (3 <= cell.getValue() && cell.getValue() <= 5) {
        userIds.add(cell.getRowKey());
    }
}
private String getRowKeyByValue(String value)
{
    return records.cellSet()
            .stream()
            .filter(cell -> cell.getValue().equals(value))
            .map(Table.Cell::getRowKey)
            .findFirst()
            .orElse(null);
}

private String getColumnKeyByValue(String value)
{
    return records.cellSet()
            .stream()
            .filter(cell -> cell.getValue().equals(value))
            .map(Table.Cell::getColumnKey)
            .findFirst()
            .orElse(null);
}