java引入类库_Java容器-引入Guava类库

目录

1、只读设置

2、函数式编程+组合式编程

3、约束条件

4、集合操作(并集、差集、交集)

代码实现

1、只读设置

public static voidmain(String [] args){//只读设置

List ls=newArrayList();

ls.add("a");

ls.add("b");

ls.add("c");//不使用guava的类库

List readList=Collections.unmodifiableList(ls);//readList.add("d"); 报错//使用guava的类库

List imutableList= ImmutableList.of("a","b","c");//imutableList.add("a"); 运行报错}

2、函数式编程

(1)函数一:找出集合众的回文字符串,回文又称 mirror word ,backword,是指字符串从前面或者后面读都是一样的,比如moom

//结果:moom 因为moon逆序以后还是moom

public static voidmain(String[] args) {

List list = Lists.newArrayList("dog", "cat", "pig", "moom");

Collection<String> pList=Collections2.filter(list, new Predicate<String>() {

public boolean apply(String s) {

return new StringBuilder(s).reverse().toString().equals(s);

}

});

// 匿名内部类,同时创建对象,Collections2.filter类似过滤器

for(Object o:pList){

System.out.println(o);

}

}

(2)函数二:日期转换

//结果:1970-01-01 1970-01-24 1970-01-02

public static voidmain(String [] args){

Set timeSet=Sets.newHashSet();

timeSet.add(1000L);

timeSet.add(2000L*1000000);

timeSet.add(3000L*20000);

Collection<String> transList= Collections2.transform(timeSet, new Function<Long, String>() {

public String apply(Long input) {

return new SimpleDateFormat("yyyy-MM-dd").format(input);

}

});

for(String s:transList){

System.out.println(s);

}

}

(3)函数三:组合式编程

public static voidmain(String [] args){

List list = Lists.newArrayList("happy", "sad", "wahaha");//方法一

Functionf1=new Function() {publicString apply(String s) {return s.length()>5&&s.length()<20?s:"error";

}

};//方法二:字母全部大写

Function f2 = new Function() {publicString apply(String input) {returninput.toUpperCase();

}

};//组合方法

Function f =Functions.compose(f1, f2);

Collection resultCol=Collections2.transform(list,f);for(Object s:resultCol){

System.out.println(s);

}

}

3、约束条件

public static voidmain(String[] args) {

Set sets =Sets.newHashSet();//创建约束

Constraint constraint = new Constraint() {

@Override

public String checkElement(String element) {

// 非空验证

Preconditions.checkNotNull(element);

// 长度限制 5-20,否则报错

Preconditions.checkArgument(

element.length()>= 5 && element.length() <= 20,

element);returnelement;

}

};

Set<String> cs = Constraints.constrainedSet(sets, constraint);

// cs.add(null); 报错java.lang.NullPointerException

//cs.add("qaz"); 报错java.lang.IllegalArgumentException: qaz

}

4、交集、并集、差集

public static voidmain(String [] args){

Set sets=Sets.newHashSet(1,2,3,4,5,6);

Set set2=Sets.newHashSet(3,4,5,6,7,8,9);

Sets.SetView<Integer> intersection =Sets.intersection(sets, set2);

for(Integer in:intersection){

System.out.print(in+" ");

}

System.out.println("");

//差集

Sets.SetView<Integer> intersection2=Sets.difference(sets,set2);

for(Integer in:intersection2){

System.out.print(in+" ");

}

System.out.println("");

//并集

Sets.SetView<Integer> intersection3=Sets.union(sets,set2);

for(Integer in:intersection3){

System.out.print(in+" ");

}

}

d0d9153b6ede38fbbb2fadbd2aafaeb4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Guava类库中的Table是一个双键的Map,可以理解为一个行列式的数据结构。 Table可以用来表示一个映射,其中每个键都有一个与之关联的值,而且这个键需要由两个参数来确定。在Table中,第一个键称为"行键",第二个键称为"列键",而对应的值称为"值"。 Table的实现方式可以看作是一个Map<RowKey, Map<ColumnKey, Value>>的嵌套结构,其中RowKey和ColumnKey分别表示行键和列键,Value表示对应的值。 Table提供了多种视图,包括行视图、列视图、单元格视图等,这些视图可以方便地进行表格的操作和查询。 下面是一个简单的示例代码: ```java Table<String, String, Integer> table = HashBasedTable.create(); table.put("row1", "col1", 1); table.put("row1", "col2", 2); table.put("row2", "col1", 3); table.put("row2", "col2", 4); System.out.println(table.get("row1", "col1")); // 输出1 System.out.println(table.row("row1")); // 输出{col1=1, col2=2} System.out.println(table.column("col1")); // 输出{row1=1, row2=3} System.out.println(table.cellSet()); // 输出[(row1,col1)=1, (row1,col2)=2, (row2,col1)=3, (row2,col2)=4] ``` 在上面的示例中,我们创建了一个Table对象,并往其中添加了四个元素。然后,我们分别通过get方法、row方法、column方法和cellSet方法获取了对应的视图,并输出了它们的内容。 需要注意的是,Table中的行键、列键和值都可以为null,但是在使用时需要特别注意空指针异常的问题。此外,Table中的行键和列键必须实现equals和hashCode方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值