Java 按值查询番石榴表
我正在从CSV文件创建一个表,其中包含不同项目的用户评分数据 我使用以下代码来填充表格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(
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);
}