如何从字符串数组生成HBase java Put类?

问题描述:

我是Java 8 lambda和流编程的新手。这是从String数组生成HBase Put类的简单源码。如何从字符串数组生成HBase java Put类?

List<String> list = new ArrayList<>(5); 
list.add("1," + "colFamily" + ",a,1"); 
list.add("2," + "colFamily" + ",a,2"); 
list.add("3," + "colFamily" + ",a,3"); 
list.add("4," + "colFamily" + ",a,4"); 
list.add("5," + "colFamily" + ",a,5"); 

for (int i=0 ; i<list.size() ; i++) { 
    String[] cells = list.get(i).split(","); 

    Put put = new Put(Bytes.toBytes(cells[0])); 
    put.addColumn(Bytes.toBytes(cells[1]),Bytes.toBytes(cells[2]),Bytes.toBytes(cells[3])); 

System.out.println(put); 

结果产生正确像下面,

{"totalColumns":1,"row":"1","families":{"colFamily":[{"qualifier":"a","vlen":1,"tag":[],"timestamp":9223372036854775807}]}} 
{"totalColumns":1,"row":"2","families":{"colFamily":[{"qualifier":"a","vlen":1,"tag":[],"timestamp":9223372036854775807}]}} 
{"totalColumns":1,"row":"3","families":{"colFamily":[{"qualifier":"a","vlen":1,"tag":[],"timestamp":9223372036854775807}]}} 
{"totalColumns":1,"row":"4","families":{"colFamily":[{"qualifier":"a","vlen":1,"tag":[],"timestamp":9223372036854775807}]}} 
{"totalColumns":1,"row":"5","families":{"colFamily":[{"qualifier":"a","vlen":1,"tag":[],"timestamp":9223372036854775807}]}} 

但是,通过使用Java的8个流,我未能产生相同的结果,下面是代码。

System.out.println(list.stream().collect(Collectors.mapping(l -> new Put(Bytes.toBytes(l)), Collectors.toList()))); 

但绝对是上面的代码带来了错误的结果。

[{"totalColumns":0,"row":"1,colFamily,a,1","families":{}}, {"totalColumns":0,"row":"2,colFamily,a,2","families":{}}, {"totalColumns":0,"row":"3,colFamily,a,3","families":{}}, {"totalColumns":0,"row":"4,colFamily,a,4","families":{}}, {"totalColumns":0,"row":"5,colFamily,a,5","families":{}}] 

我不知道如何用java 8流功能逗号分隔的串拆分字符串数组。

+0

嗨约瑟夫 - 我可以给你一些提示张贴?我是一名志愿编辑,大部分时间都在Stack Overflow上,他们花费在向人们展示如何提出良好问题或编写问题。我们真的很喜欢这里的简洁问题,所以如果你可以忽略以下内容,那会很棒。 (a)您需要多少回复,(b)您被困多久,(c)您(深深地)赞赏回复,(d)发送(善意/最好)问候,(e)任何形式的txtspk,比如“pls”。这将节省大量的志愿者时间。谢谢。 – halfer

如何:

list 
.stream() 
.map(s -> s.split(",")) 
.map(cells -> { 
    Put put = new Put(Bytes.toBytes(cells[0])); 
    put.addColumn(Bytes.toBytes(cells[1]), Bytes.toBytes(cells[2]), Bytes.toBytes(cells[3])); 
    return put; 
}) 
.forEach(System.out::println) // or .collect to list