java – 按某个表列的值获取所有键
发布时间:2020-12-15 02:11:51 所属栏目:Java 来源:网络整理
导读:我在 Java中有一个表格数据表示. 到目前为止,我使用Google Guava将数据保存在表 R,C,V中. 鉴于此表 |----------------------------------------------|| Artist | Genre | Type ||----------------------------------------------|| Eddie Van Halen | Music
我在
Java中有一个表格数据表示.
到目前为止,我使用Google Guava将数据保存在表< R,C,V>中. 鉴于此表 |----------------------------------------------| | Artist | Genre | Type | |----------------------------------------------| | Eddie Van Halen | Musician | Hard Rock | | David Bowie | Musician | Art Pop | | David Lynch | Director | Surrealist Film | | George Lucas | Director | Blockbuster | |----------------------------------------------| 我用这个 Table<String,String,String> table = HashBasedTable.create(); table.put("Eddie Van Halen","Genre","Musician"); table.put("Eddie Van Halen","Type","Hard Rock"); table.put("David Bowie","Musician"); table.put("David Bowie","Art Pop"); table.put("David Lynch","Director"); table.put("David Lynch","Surrealist Film"); table.put("George Lucas","Director"); table.put("George Lucas","Blockbuster"); 创建表对象. 使用行或列键很容易获取数据. table.get("David Bowie","Genre"); // "Musician" 我也可以获取特定列的所有数据: table.column("Genre").values(); // [Musician,Director,Musician,Director] 我的主要兴趣是找回所有艺术家,他们都是导演.在这种情况下,它是按值查找.那里有二维地图,如Apache Collections的BidiMap或Google Guava的BiMap. 但是有没有实现有助于通过表格数据的值获取一组行键? 我很想找到类似的东西 Set<R> table.getRowsByValue( C columnKey,V value ) 这应该导致类似于: table.getRowsByValue("Genre","Musician"); // [David Bowie,Eddie Van Halen] 更新1 正如我之前提到的,有Map实现,允许按给定值检索键. BidiMap bidiMap = new DualHashBidiMap<String,String>(table.column("Genre")); bidiMap.getKey("Musician"); // "David Bowie" Apache Colletions方式 – 只返回最后一个元素. BiMap biMap = HashBiMap.create(table.column("Genre")); biMap.inverse().get("Musician"); Google Guava的BiMap引发了一个(冗长的)异常: java.lang.IllegalArgumentException: value already present: Musician 解决方法
使用常规地图,我会迭代Map.entrySet(),然后拉Map.Entry.getKey().
在这里你似乎能够迭代cellSet() 在java 8(希望没有拼写错误,我没有尝试): table.cellSet().stream() .filter(tc -> tc.getColumnKey().equals("Director")) .collect(Collectors.toList()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |