Guava总结4-杂七杂八

本文介绍Java中使用Splitter和Joiner处理字符串的方法,包括列表自动类型转换、筛选、排序以及双向映射和TreeRangeMap的应用。通过具体代码示例展示了如何高效地进行字符串操作和数据转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Splitter 和 Joiner

一个是自动分割,一个是合并.直接看代码

//用逗号隔开.
private static final String SPLITE = ",";

    private static final Joiner joiner = Joiner.on(SPLITE);

    private static final Splitter splitter = Splitter.on(SPLITE);

public void join(){
//将list自动变成以逗号分割组成的字符串
lotteryAwardMsgDO.setJuids(joiner.join(lotteryAwardMsgBO.getJuidList()));
}

public void splite{
//把一个字符串用逗号分隔开,然后自动转换成Iterable<String>
for(String juidStr: splitter.trimResults().omitEmptyStrings().split(lotteryAwardMsgDO.getJuids())){
            if(isNumeric(juidStr)){
                lotteryAwardMsgBO.addJuId(Long.parseLong(juidStr));
            }
        }
}
//比如 一个字符串是 “key1_value1:key2_value2”,可以这样
Map<String,String> map = Splitter.on(":").trimResults().withKeyValueSeparator("_").split("key1_value1:key2_value2");

 

 

列表的自动类型转换

比如将List<String> 类型转换成List<Long>

直接看例子.

@Override
        public List<BackCatClientTO> getChildren() {
            List<BackCategoryTO> children = backCategoryForest.getChildBackCats().get(categoryId);
            if(children == null || children.isEmpty()) return Collections.EMPTY_LIST;
            List<Long> categoryIds = Lists.transform(children,new Function<BackCategoryTO, Long>() {
                @Nullable
                @Override
                public Long apply(@Nullable BackCategoryTO backCategoryTO) {
                    return backCategoryTO.getCategory();
                }
            });
            return BackCatClientServiceImpl.this.build(categoryIds);
        }

 

筛选

比如某一个List中,把一些不符合要求的数据给筛选掉,直接看例子

注意,这个方法是非线程安全的.

Iterables.removeIf(frontCats, new Predicate<JuCategoryTO>() {
				@Override
				public boolean apply(@Nullable JuCategoryTO input) {
					return input.isHidden();
				}
			});

 

排序

直接看代码

Collections.sort(juCategoryTOs,new Comparator<JuCategoryTO>() {
            @Override
            public int compare(JuCategoryTO o1, JuCategoryTO o2) {
                //大的返回1,小的返回-1 .
                if(o1.getIndex() > o2.getIndex()){
                    return 1;
                } else if(o1.getIndex() < o2.getIndex()){
                    return -1;
                }else {
                    return 0;
                }
            }
        });

 双向map

public class VisitTypeMachine {

    private static final  BiMap<Integer,String> visitType2Name = HashBiMap.create();

    static {
        visitType2Name.put(1,"淘宝类目");
        visitType2Name.put(2,"直接访问");
        visitType2Name.put(3,"淘宝搜索");
        visitType2Name.put(4,"淘宝站内其他");
        visitType2Name.put(5,"店内浏览");
        visitType2Name.put(6,"QQ空间");
        visitType2Name.put(7,"阿里旺旺非广告");
        visitType2Name.put(8,"店铺收藏");
        visitType2Name.put(9,"购物车");
        visitType2Name.put(10,"淘宝客");
        visitType2Name.put(11,"淘宝站外其他");
        visitType2Name.put(12,"我的淘宝");
        visitType2Name.put(13,"直通车");
        visitType2Name.put(99,"未纳入");

    }

    public static String getNameByType(Integer type){
        return visitType2Name.get(type);
    }

    public static Integer getTypeByName(String name){
        Integer integer = visitType2Name.inverse().get(name);
        return integer;
    }
}

 

TreeRangeMap

经常会有一些需求,比如 0到60分是不及格,60到85分是良 85到100是优。如果不想写一堆if else 就可以试试用 TreeRangeMap

hashRangeMap = TreeRangeMap.create(); 
            hashRangeMap.put(Range.atMost(83268L), 0);
            hashRangeMap.put(Range.openClosed(83268L, 1998816L), 1);
            hashRangeMap.put(Range.openClosed(1998816L, 170404392L), 10);
            hashRangeMap.put(Range.openClosed(170404392L, 5899180011L), 100);
            hashRangeMap.put(Range.openClosed(5899180011L, 8184000062L), 300);
            hashRangeMap.put(Range.openClosed(8184000062L, 43657112106L), 700);
            hashRangeMap.put(Range.openClosed(43657112106L, 136910372737L), 1500);
            hashRangeMap.put(Range.openClosed(136910372737L, 698513762858L), 4000);
            hashRangeMap.put(Range.openClosed(698513762858L, 1396960220484L), 6000);
            hashRangeMap.put(Range.greaterThan(1396960220484L), 8000);

 

 

内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值