原创作品,可以转载,但是请标注出处地址: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. 手把手教你用Vue造轮子(3):开发可排序的表格组件

    前言 最近闰土大叔跟Vue干上了,没办法,公司业务驱动,不用Vue没招啊,leader尝到了前后端分离带来的好处,除非你离职,哈哈哈,当然,那是不可能的,对于我这种要攒钱买房子的人来说.那还说什么呢, ...

  2. makefile在编译的过程中出现“except class name”

    今天写了部分代码,在添加到项目中后就那些编译,出现问题如下: logistic_regression_layer.h::: error: expected class name public Laye ...

  3. Linux 下非root用户使用docker

    Linux 下非root用户使用docker 通常我们使用linux系统的时候,最好是不要直接使用root账号,但是使用Docker的时候,默认又是不能使用非root用户的,关于原因,官方说法如下: ...

  4. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 用线段树维护区间连通性,对于每一个区间记录6个域表示(左上,左下)(左上,右上)(右上, ...

  5. 二分查找c++简单模板

    //数组a[]中有n各元素,已经按升序排序,待查找的元素x sort(a,a+n); //升序排序 template<class Type> int BinarySearch(Type a ...

  6. phpStudy2016 配置多个域名期间遇到的问题

    http://www.cnblogs.com/ssfs/p/6255791.html 第一步 在C:\Windows\System32\drivers\etc下的hosts文件下添加   第二步   ...

  7. jQuery时间格式插件-moment.js的使用

    jQuery时间格式插件-moment.js的使用 moment.js插件的使用,使用之前在页面引入对应的js文件: 详细的操作可见moment中文官网:http://momentjs.cn/ 日期格 ...

  8. Linux - ubuntu 16 打开SSH服务

    ubuntu 16 打开SSH服务 1.查看是否启动进程 roott@jiqing-virtual-machine:~# ps -ef | grep sshd root 3477 1 0 18:36 ...

  9. css FlexBox 弹性盒子常用方法总结

    总结一下弹性盒子常用的方法,弹性盒子的功能强大,这次我做了兼容性的felxbox,虽然代码多了一点,但在项目时候可以直接复制过来用,同时在项目上线的时候,如果这时候弹性盒子出了兼容问题,那就可急了~ ...

  10. PID算法

    所谓PID就是比例-积分-微分的英文缩写,但并不是必须同时具备这三种算法,也可以是 PD, PI,甚至只有 P算法控制,下面分别介绍每个参数的含义:首先需要明确一个事实就是,要实现PID算法,必须在硬 ...