引入依赖

https://search.maven.org/search?q=guava

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<!-- https://search.maven.org/artifact/com.google.guava/guava/ -->
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version>
</dependency>

fox.风

案例 数组 拼接(连接)成 字符串

//创建 map xx
Map<Long,String > xx= Maps.newHashMap();
xx.put(1L,"ssss");
xx.put(2L,"bbbbb");
//创建 map xx2
Map<Long,String > xx2= Maps.newHashMap();
xx2.put(3L,"ssss");
xx2.put(4L,"bbbbb");
//创建数组 aooList
List<String> aooList = Lists.newArrayList(xx.values());
//把  xx2 所有值 存入数组 xx2.values()
aooList.addAll(xx2.values());
//输出
log.info("at ={}",aooList);
//把 List 数组 用 ,  号 拼接(连接)成 字符串,并跳过 null 值
String str= Joiner.on(",").skipNulls().join(aooList);
log.info("join str ={}",str);

输出

at =[ssss, bbbbb, ssss, bbbbb]
join str =ssss,bbbbb,ssss,bbbbb

案例 字符串 分割成数组

String strArr = "ssss,bbbbb,ssss,,bbbbb";
// 自带分割
String[] arr1 = strArr.split(",");
//转换为 list ,注意这个list 不能再添加原素,否则报错
List<String> list2 = Arrays.asList(arr1);
log.info("List arr1 ={}", list2);
//转换为 list,注意这个list 可以再添加原素
List<String> list3 = Lists.newArrayList(Arrays.asList(arr1));
//转换为 list,注意这个list 可以再添加原素
List<String> list4 = new ArrayList<>(Arrays.asList(arr1));//分割,去除 空值 转换为 List
List<String> strings1 = Splitter.on(',').trimResults().omitEmptyStrings().splitToList(strArr);
//分割,去除 空值
Iterable split = Splitter.on(",").trimResults().omitEmptyStrings().split(strArr);
log.info(" Iterable split ={}", split);
//转换为 list
List<String> list = Lists.newArrayList(split);
log.info(" List list ={}", list);
// List<String>  转换 为long[]
long[] array =list.stream().mapToLong(t->t.longValue()).toArray();

输出

List arr1 =[ssss, bbbbb, ssss, , bbbbb]
Iterable split =[ssss, bbbbb, ssss, bbbbb]
List list =[ssss, bbbbb, ssss, bbbbb]

初始化创建

String[] arrays = ObjectArrays.newArray(String.class, 100);
//100 表示长度Map<String, String> map = ImmutableMap.of("二维码","100","人脸","400");//创建不可变的集合
ImmutableSet<String> type = ImmutableSet.of("人脸","二维码");
ImmutableSet<String> copy = ImmutableSet.copyOf(type);//返回不可变的集合

双键map

Table<rowKeys, columnKeys, values>

@Data
public class TestDto implements Serializable {private String name;
}// 1. 双键测试
Table<String, String, TestDto> table = HashBasedTable.create();
TestDto dto=new TestDto();
dto.setName("name1");
table.put("1", "a", dto);
//
TestDto dto2=new TestDto();
dto2.setName("name2");
table.put("1", "b", dto2);
//
TestDto dto3=new TestDto();
dto3.setName("name3");
table.put("2", "a", dto3);
//
TestDto dto4=new TestDto();
dto4.setName("name4");
table.put("2", "b", dto4);System.out.println(table.get("1", "a"));
System.out.println(table.get("1", "b"));
System.out.println(table.get("2", "a"));
System.out.println(table.get("2", "b"));

输出

TestDto(name=name1)
TestDto(name=name2)
TestDto(name=name3)
TestDto(name=name4)

获取对应列集合

接着上面代码

////rowKey或columnKey的集合Set<String> rowKeys = table.rowKeySet();Set<String> columnKeys = table.columnKeySet();//value集合Collection<TestDto> values = table.values();System.out.println(rowKeys);System.out.println(columnKeys);System.out.println(values);

输出

[1, 2]
[a, b]
[TestDto(name=name1), TestDto(name=name2), TestDto(name=name3), TestDto(name=name4)]

输出内容

//for (String key : table.rowKeySet()) {Set<Map.Entry<String, TestDto>> rows = table.row(key).entrySet();System.out.println("rows:" + rows);for (Map.Entry<String, TestDto> row : rows) {System.out.println("row:" + row);}}

输出

rows:[a=TestDto(name=name1), b=TestDto(name=name2)]
row:a=TestDto(name=name1)
row:b=TestDto(name=name2)
rows:[a=TestDto(name=name3), b=TestDto(name=name4)]
row:a=TestDto(name=name3)
row:b=TestDto(name=name4)

转换rowKey和columnKey

Table<String, String, TestDto> table2 = Tables.transpose(table);Set<Table.Cell<String, String, TestDto>> cells = table2.cellSet();cells.forEach(cell->System.out.println(cell.getRowKey()+","+cell.getColumnKey()+":"+cell.getValue()));

输出

a,1:TestDto(name=name1)
b,1:TestDto(name=name2)
a,2:TestDto(name=name3)
b,2:TestDto(name=name4)

转为嵌套的Map

 Map<String, Map<String, TestDto>> rowMap = table.rowMap();Map<String, Map<String, TestDto>> columnMap = table.columnMap();System.out.println("rowMap:" + rowMap);System.out.println("columnMap:" + columnMap);

输出

rowMap:{1={a=TestDto(name=name1), b=TestDto(name=name2)}, 2={a=TestDto(name=name3), b=TestDto(name=name4)}}
columnMap:{a={1=TestDto(name=name1), 2=TestDto(name=name3)}, b={1=TestDto(name=name2), 2=TestDto(name=name4)}}

BiMap - 双向Map : 根据value查找对应的key

HashBiMap的value是禁止重复的,如果需要更新替换,那么请用biMap.forcePut("卡","900");

HashBiMap<String, String> biMap = HashBiMap.create();biMap.put("二维码","100");biMap.put("人脸","200");biMap.put("卡","300");biMap.put("身份证","400");biMap.put("替换测试","900");biMap.forcePut("替换测试","1000");//强制更新替换//使用key获取valueSystem.out.println(biMap.get("身份证"));BiMap<String, String> inverse = biMap.inverse();//使用value获取keySystem.out.println(inverse.get("300"));

输出

400
卡

Multimap - 多值Map

Multimap<String, String> multimap = ArrayListMultimap.create();multimap.put("类型","二维码");multimap.put("类型","人脸");multimap.put("类型","身份证");multimap.put("类型","卡");multimap.put("人","小王");multimap.put("人","小刘");System.out.println(multimap);

输出

{人=[小王, 小刘], 类型=[二维码, 人脸, 身份证, 卡]}
ArrayListMultimap<String, String> multimap = ArrayListMultimap.create();multimap.put("类型","二维码");multimap.put("类型","人脸");multimap.put("类型","身份证");multimap.put("类型","卡");multimap.put("人","小王");multimap.put("人","小刘");List<String> type = multimap.get("类型");List<String> user = multimap.get("人");System.out.println(type);System.out.println(user);

输出

[二维码, 人脸, 身份证, 卡]
[小王, 小刘]

RangeMap - 范围Map

价格区间判断

RangeMap<Integer, String> rangeMap = TreeRangeMap.create();//  0<= 范围   <100rangeMap.put(Range.closedOpen(0, 100), "没有优惠");//  100<= 范围   <500rangeMap.put(Range.closedOpen(100, 500), "优惠70");//  500<= 范围   <=1000rangeMap.put(Range.closed(500, 1000), "8折优惠");//  1000<= 范围   <=10000rangeMap.put(Range.openClosed(1000, 10000), "5折优惠");System.out.println("59:"+rangeMap.get(59));System.out.println("100:"+rangeMap.get(100));System.out.println("200:"+rangeMap.get(200));System.out.println("500:"+rangeMap.get(500));System.out.println("600:"+rangeMap.get(600));System.out.println("1200:"+rangeMap.get(1200));System.out.println("1000:"+rangeMap.get(1000));System.out.println("1001:"+rangeMap.get(1001));

输出

59:没有优惠
100:优惠70
200:优惠70
500:8折优惠
600:8折优惠
1200:5折优惠
1000:8折优惠
1001:5折优惠

ClassToInstanceMap - 实例Map

@Data
public class OrderDto implements Serializable {private String orderNo;private String orderId;
}
@Data
public class TestDto implements Serializable {private String name;
}ClassToInstanceMap<Object> instanceMap = MutableClassToInstanceMap.create();OrderDto order = new OrderDto();order.setOrderId("1");order.setOrderNo("100000001");TestDto dto = new TestDto();dto.setName("name1");instanceMap.putInstance(OrderDto.class, order);instanceMap.putInstance(TestDto.class, dto);System.out.println("OrderDto:" + instanceMap.get(OrderDto.class));System.out.println("TestDto:" + instanceMap.get(TestDto.class));

输出

OrderDto:OrderDto(orderNo=100000001, orderId=1)
TestDto:TestDto(name=name1)

筛选

筛选订单数据类型为 SUCCESS

@Data
public class OrderDto implements Serializable {private String orderNo;private String orderId;private String type;
}//
OrderDto dto = new OrderDto();dto.setOrderId("1");dto.setOrderNo("100000001");dto.setType("SUCCESS");OrderDto dto2 = new OrderDto();dto2.setOrderId("2");dto2.setOrderNo("100000002");dto2.setType("NOT_PAID");OrderDto dto3 = new OrderDto();dto3.setOrderId("3");dto3.setOrderNo("100000003");dto3.setType("CHECK");//List<OrderDto> list = Lists.newArrayList(dto, dto2, dto3);System.out.println("OrderDto:" + list);ImmutableMultiset<OrderDto> orderDtos = ImmutableMultiset.copyOf(Collections2.filter(list, new Predicate<OrderDto>() {@Overridepublic boolean apply(OrderDto orderDto) {return "SUCCESS".equals(orderDto.getType());}}));System.out.println("filter:SUCCESS:" + orderDtos);

输出

OrderDto:[OrderDto(orderNo=100000001, orderId=1, type=SUCCESS), OrderDto(orderNo=100000002, orderId=2, type=NOT_PAID), OrderDto(orderNo=100000003, orderId=3, type=CHECK)]filter:SUCCESS:[OrderDto(orderNo=100000001, orderId=1, type=SUCCESS)]

获取对象某一个列,返回数组

OrderDto dto = new OrderDto();dto.setOrderId("1");dto.setOrderNo("100000001");dto.setType("SUCCESS");OrderDto dto2 = new OrderDto();dto2.setOrderId("2");dto2.setOrderNo("100000002");dto2.setType("NOT_PAID");OrderDto dto3 = new OrderDto();dto3.setOrderId("3");dto3.setOrderNo("100000003");dto3.setType("CHECK");//List<OrderDto> list = Lists.newArrayList(dto, dto2, dto3);System.out.println("OrderDto:" + list);List<String> transform = Lists.transform(list, new Function<OrderDto, String>() {@Overridepublic String apply(OrderDto input) {return input.getOrderId();}});System.out.println("transform:" + transform);

输出

OrderDto:[OrderDto(orderNo=100000001, orderId=1, type=SUCCESS), OrderDto(orderNo=100000002, orderId=2, type=NOT_PAID), OrderDto(orderNo=100000003, orderId=3, type=CHECK)]
//
transform:[1, 2, 3]

排序

只对可排序类型做排序(数字,日期)

List<String> list = Lists.newArrayList("100", "2", "900", "313", "41", "544", "15", "25", "二维码", "人脸", "卡");//natural 正序排序Ordering<Comparable> natural = Ordering.natural();list.sort(natural);System.out.println(list);//反转 反过来list.sort(natural.reverse());System.out.println(list);List<Integer> ints = Lists.newArrayList(121, 12, 13, 433, 3, 444, 7, 5);//natural 正序排序ints.sort(natural);System.out.println(ints);//反转 反过来ints.sort(natural.reverse());System.out.println(ints);

输出

[100, 15, 2, 25, 313, 41, 544, 900, 二维码, 人脸, 卡]
[卡, 人脸, 二维码, 900, 544, 41, 313, 25, 2, 15, 100]
[3, 5, 7, 12, 13, 121, 433, 444]
[444, 433, 121, 13, 12, 7, 5, 3]

按首字母排序

List<String> list = Lists.newArrayList("100", "2", "900", "313", "41", "544", "15", "25", "二维码", "人脸", "卡");// 按首字母Ordering<String> stringOrdering = new Ordering<String>() {@Overridepublic int compare(String left, String right) {return Collator.getInstance(Locale.CHINA).compare(left, right);}};list.sort(stringOrdering);System.out.println(list);

输出

[100, 15, 2, 25, 313, 41, 544, 900, 二维码, 卡, 人脸]

按名字首字母排序

@Data
public class OrderDto implements Serializable {private String orderNo;private String orderId;private String type;private String customer;
}/*** 按 name 排序,一定要判断一下对比的对象以及字段为null的情况,不然会bug的,虽然你当时可能不会报错。*/Ordering<OrderDto> ordering = new Ordering<OrderDto>() {@Overridepublic int compare(OrderDto left, OrderDto right) {if (left == null && right == null) {return 0;}if (left == null) {return 1;}if (right == null) {return -1;}if (left.getOrderId() == null && right.getOrderId() == null) {return 0;}if (left.getOrderId() == null) {return 1;}if (right.getOrderId() == null) {return -1;}return Collator.getInstance(Locale.CHINA).compare(left.getCustomer(), right.getCustomer());}};OrderDto dto = new OrderDto();dto.setOrderId("1");dto.setOrderNo("100000001");dto.setType("SUCCESS");dto.setCustomer("张三");OrderDto dto2 = new OrderDto();dto2.setOrderId("2");dto2.setOrderNo("100000002");dto2.setType("NOT_PAID");dto2.setCustomer("李四");OrderDto dto3 = new OrderDto();dto3.setOrderId("3");dto3.setOrderNo("100000003");dto3.setType("CHECK");dto3.setCustomer("啊黄");List<OrderDto> list = Lists.newArrayList(dto, dto2, dto3);System.out.println("OrderDto:" + list);list.sort(ordering);System.out.println("ordering:" + list);list.forEach(item -> System.out.print(item.getCustomer() + " " + item + "\n"));

输出

OrderDto:[OrderDto(orderNo=100000001, orderId=1, type=SUCCESS, customer=张三), OrderDto(orderNo=100000002, orderId=2, type=NOT_PAID, customer=李四), OrderDto(orderNo=100000003, orderId=3, type=CHECK, customer=啊黄)]
ordering:[OrderDto(orderNo=100000003, orderId=3, type=CHECK, customer=啊黄), OrderDto(orderNo=100000002, orderId=2, type=NOT_PAID, customer=李四), OrderDto(orderNo=100000001, orderId=1, type=SUCCESS, customer=张三)]啊黄 OrderDto(orderNo=100000003, orderId=3, type=CHECK, customer=啊黄)
李四 OrderDto(orderNo=100000002, orderId=2, type=NOT_PAID, customer=李四)
张三 OrderDto(orderNo=100000001, orderId=1, type=SUCCESS, customer=张三)

java guava map创建,数组合并,数组分割连接相关推荐

  1. java 使用vsphere 创建虚拟机‘_Java数组的创建及使用

    数组是具有相同数据类型的一组数据的集合,作为对象允许使用new关键字进行内存分配.首先先来熟悉一下一维数组的创建和使用. 声明一维数组,有下列两种方式: 数组元素类型 数组名字[]; 数组元素类型[] ...

  2. java文本框输入double,java声明并创建float型数组,double型数组,使用键盘输入的方式给各...

    import java.util.Scanner; public class Array { public static void main(String[] args) { float[] f=ne ...

  3. java 只读数组_在Java 8中创建方法引用数组的速记方法?

    我正在使用Wicket 6 / Java 8,并添加了一些简单的类,这些类利用了Java 8中的lambda功能(我知道Wicket的更高版本具有lambda支持,但我们现在不能升级).我正在创建一个 ...

  4. Android 几种拼接数组合并数组的方法

    实际项目中需要使用数组拼接合并,还有需要截取. 下面是网上搜集整理的四个方法: 一,apache-commons 二,Arrays.copyOf 三,Array.newInstance 四,Syste ...

  5. 那些方式可以合并php数组,合并数组(PHP)

    如何以这种方式组合数组? 资源: Array ( [0] => Array ( [id] => 3 [title] => book [tval] => 10000 ) [1] ...

  6. 遍历多个数组 合并数组

    foreach ($resData['data'] as $key => $value) {if($value['type']==1){$xtitle[0][] = "热卖" ...

  7. C语言题解 | 去重数组合并数组

    -

  8. python(numpy,pandas4)——numpy中array合并和分割

    文章目录 前言 合并 垂直合并,水平合并 增加新维度 多数组合并concatenate 分割 等量分割split 不等量分割array_split 前言 根据 莫烦Python的教程 总结写成,以便自 ...

  9. java 合并 set_【Java必修课】各种集合类的合并(数组、List、Set、Map)

    1 介绍 集合类可谓是学习必知.编程必用.面试必会的,而且集合的操作十分重要:本文主要讲解如何合并集合类,如合并两个数组,合并两个List等.通过例子讲解几种不同的方法,有JDK原生的方法,还有使用第 ...

  10. java集合合并_【Java必修课】各种集合类的合并(数组、List、Set、Map)

    1 介绍 集合类可谓是学习必知.编程必用.面试必会的,而且集合的操作十分重要:本文主要讲解如何合并集合类,如合并两个数组,合并两个List等.通过例子讲解几种不同的方法,有JDK原生的方法,还有使用第 ...

最新文章

  1. Confluence 6 配置日志
  2. The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554
  3. 3.3 前向传播与反向传播-机器学习笔记-斯坦福吴恩达教授
  4. 关于页面之间传参时有空格,中文及点击页面后退按钮的问题
  5. 前端开发-热更新原理解读
  6. 苹果iPad mini 6更多细节曝光:全面屏加持 搭载A14/A15芯片
  7. svn 设置文件可执行权限
  8. Google SPDY介绍
  9. 4万字的“整洁三部曲”干货,全浓缩在这一篇里了
  10. 28KHZ/40KHZ老款超声波开关线路板
  11. Thrift交流(二)thrift服务端和客户端实现 Nifty
  12. 耶鲁大学开放课程:《金融市场》第3课
  13. 双硬盘安装win10和linux双系统,双硬盘安装win10+ubuntu18心得
  14. 避免在for循环中使用sql语句
  15. 卷积神经网络的形象理解
  16. php lt lt lt eod,[PHP]EOD及mail发布_PHP
  17. 位图与bitblt【位图知识】
  18. React 系列教程2:编写兰顿蚂蚁演示程序
  19. python分布式(scrapy-redis)实现对房天下全国二手房与新房的信息爬取(偏小白,有源码有分析)
  20. print(f‘‘)的用法

热门文章

  1. 请假时碰到法定假期,实际请假几天?
  2. 时序图(Sequence Diagram)—UML图(六)
  3. 数据之美系列5(转载)
  4. 如何在C#中播放一些AVI短片,并且使背景透明
  5. 孙鑫VC学习笔记:第十六讲 (一) 利用事件对象实现线程间的同步
  6. 拓端tecdat|python主题LDA建模和t-SNE可视化
  7. 拓端tecdat|R语言使用灰色关联分析(Grey Relation Analysis,GRA)中国经济社会发展指标
  8. 拓端tecdat|R语言分段回归数据分析案例报告
  9. Android入门笔记03
  10. spring5.0学习笔记6