原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7039842.html

  场景描述:公司新活动,需要在活动页面显示指定利率的四种投资项目,并且如果存在同利率投资项目,要显示进度最低的投资项目,现在对问题进行简化,以字符串的形式进行描述:我们用list1来存放从数据库查询得到的所以符合条件的投资项目列表,现在对这个列表进行去重。

  我们取出多余字段,并将有关字段拼装成字符串形式来进行模拟:比如"1.1-20"表示利率为1.1%,进度为20%的项目。

  下面贴出实现算法:(主要就是关于List的去重问题)

     public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
list1.add("1.1-10");
list1.add("2.2-10");
list1.add("2.2-20");
list1.add("4.4-20");
list1.add("3.3-30");
list1.add("2.2-5");
list1.add("4.4-50");
a:for(String s1 : list1){
if(list2.isEmpty()){
list2.add(s1);
}else{
int j = 0;
for(String s2 : list2){
j++;
if(s2.substring(0, 2).equals(s1.substring(0, 2))){
if(Double.valueOf(s2.substring(4)) >= Double.valueOf(s1.substring(4))){
list2.remove(s2);
list2.add(s1);
continue a;//这里不能是break,因为如果写成break,会导致错误:j和list2.size()的比较有一个错误点,那就是在list1的元素与list2中的最后一个元素有关,发生替换操作之后,break会跳出当前循环,但是会继续执行外部循环剩余的代码,去执行j与list2.size()的比较,结果会将这个元素再写入一次,所以这里直接跳转到外部循环开启的位置,来避免这种错误
}else{
continue a;//此处问题同上
}
}else{
continue;
}
}
if(j == list2.size()){
list2.add(s1);
}
}
}
System.out.println(list2);
}

执行结果:

[1.1-10, 4.4-20, 3.3-30, 2.2-5]

第二种实现:

     public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add("1.1-30");
list1.add("1.1-40");
list1.add("1.1-50");
list1.add("1.1-60");
list1.add("2.2-20");
list1.add("1.1-20");
list1.add("3.3-10");
list1.add("3.3-20");
list1.add("2.2-10");
list1.add("1.1-10");
list1.add("2.2-5");
list1.add("4.4-12");
list1.add("4.4-11");
for(String s1:list1){
if(list2.isEmpty()){
list2.add(s1);
}else{
int j = 0;
for(String s2:list2){
j++;
if(s1.substring(0,2).equals(s2.substring(0,2))){
if(Double.parseDouble(s2.substring(4)) >= Double.parseDouble(s1.substring(4))){
list2.remove(s2);
list2.add(s1);
break;
}else{
break;
}
}else if(j == list2.size()){
list2.add(s1);
break;
}else{
continue;
}
}
}
}
System.out.println(list2);
}

运行结果:

[3.3-10, 1.1-10, 2.2-5, 4.4-11]

一个特殊的List去重问题的解决方案的更多相关文章

  1. 记录一个IIS的服务器错误问题的解决方案

    部署一个mvc项目到iis的时候提示有下面这样的错误, 看提示是Microsoft.CodeDom.Providers.DotNetCompilerPlatform,权限问题. 我是第一次遇到,所以只 ...

  2. ftp 一个账号多个家目录的解决方案

    通常,配置ftp时,一个ftp账号只对应一个家目录,不能有多个家目录的情况. 但是,根据公司开发项目的需求,需要做到一个ftp对应多个开发目录.有想过创建软链接的,可是发现通过ftp是访问不了的. 举 ...

  3. 一个WEB网站高并发量的解决方案

    一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站相关的技术经过 ...

  4. select初始化添加option,通过标签给出回显值,由于回显值和初始化值option中有一个值重复,去重等问题!

    第一张图片: 第二张图片 /** *该方法是为了去重,所谓去重就是 因为回显给select附上了值并设置为selected选中状态,而在我们初始化所有的select添加option元素中于回显的值重复 ...

  5. ajax 一个 gbk 目标后内容乱码的解决方案

    ajax 一个 gbk 目标后,如果内容出现乱码,说明服务器在送出内容时没有指定 charset,ajax 对于没有指定 charset 的 response 默认以 utf-8 来处理,所有出现乱码 ...

  6. mssql sql server上如何建一个只读视图–视图锁定的另类解决方案

    转自:http://www.maomao365.com/?p=4508 <span style="color:red;font-weight:bold;">我们熟知一个 ...

  7. 类似“未能加载文件或程序集“tesseractengine3”或它的某一个依赖项”等一些问题的解决方案

    有些时候我们引用了一些32位的dll,结果就会出现类似“未能加载文件或程序集“tesseractengine3”或它的某一个依赖项”这样的问题,原因是IIS的应用程序池的设置中默认是不启用32位的应用 ...

  8. WEB.NET error:请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping 解决方案

    参考 http://blog.csdn.net/kisscatforever/article/details/50579935 今天用了一个组件 一个验证型的组件. 然后出现了这个问题. 我看了网上一 ...

  9. C# 只运行一个实例 ShowWindowAsync 窗体隐藏时失效 解决方案

    如果窗体已经隐藏,那么利用instance.MainWindowHandle得到的句柄为空,继而ShowWindowAsync 操作失败 不过我们可以使用FindWindow来查找到指定窗体的句柄 只 ...

随机推荐

  1. IntelliJ IDEA 教程(1)

    过完年,新的学习阶段又开始了.星爷的电影票还没还,国民岳父(韩寒)的礼钱也没送,王老板说再立一个小目标,马老板说我不在乎钱...学习还得继续. IntelliJ Idea 简称IDEA,是java语言 ...

  2. 学习笔记-使用cmd命令行创建nodejs项目

    使用cmd命令行创建nodejs项目 1)在DOS下cd 进入到你想要创建项目的路径. 2)mkdir sing (创建一个sing文件夹) 3)cd sing  4) npm init (初始化工程 ...

  3. bzoj 2806: [Ctsc2012]Cheat

    传送门 好久没刷bzoj惹…… 题意不说可以嘛. 首先二分答案. SAM的事情搞完以后就是dp辣. 我们已经对于每个位置i,找到了最小的一个k,使得[k,i]这个子串在模版串中出现过.那么我们需要做的 ...

  4. 51 Nod 1057 N的阶乘【Java大数乱搞】

    1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N求N的阶乘的准确值.   Input 输入N(1 <= N <= 10000) Ou ...

  5. c++(线性结构的处理)

    我们知道,在内存中的空间都是连续的.也就是说,0x00000001下面的地址必然是0x00000002.所以,空间上是不会出现地址的突变的.那什么数据结构类型是连续内部空间呢,其实就是数组,当然也可以 ...

  6. java IO流、集合类部分小知识点总结

    在Java中,以下三个类经常用于处理数据流,下面介绍一下三个类的不同之处以及各自的用法. InputStream : 是所有字节输入流的超类,一般使用它的子类:FileInputStream等,它能输 ...

  7. include指令与include动作的区别(面试要考)

    include指令: 语法格式:<%@ include file=" " ...%> 发生作用的时间:页面转换期间 包含的内容:页面的实际内容 转换成的servlet: ...

  8. 使用nginx作为websocket的proxy server

    blog.csdn.net/zhx6044/article/details/50278765 WebSocket WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选 ...

  9. 用户使用VPS的12个常见问题

    1.VPS主机用户能否进行备份? VPS主机允许用户进行自主的备份,这个操作非常简单,是需要在用户控制面板点击备份按钮即可.同时还允许用户恢复到任何备份状态. 2.当某个VPS主机用户被攻击时,会不会 ...

  10. Aliase_小白学Python_Day0_前言

    听到有老师介绍,说你为什么不把你的学习过程保存下来,一是当做总结,二是作为分享.我想,也对.这算是我的第一个博客,本次想写写我为什么选择学习Python. 很多人都问过我一个问题,行业那么多,你为什么 ...