加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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");

创建表对象.

使用行或列键很容易获取数据.
所以我可能会得到David Bowie的类型:

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()
返回Set< Table.Cell< R,V>>

在java 8(希望没有拼写错误,我没有尝试):

table.cellSet().stream()
   .filter(tc -> tc.getColumnKey().equals("Director"))
   .collect(Collectors.toList());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读