一 需求
已知字符串A="1,2,3,4,5,6,7,8"
已知字符串B="1,3,4"
获取他们不相同的部分
二 延伸
当后端需要返回给前端完整的任务列表, 任务列表一共有八个, 已知完成了三个任务
(从数据库中获取), 如何取得未完成的任务列表)
三 思路
方法一:
把总任务列表和已完成的任务列表, 放入list的集合中,
遍历总完成的任务列表, 依次跟已完成任务列表比较,
如果总任务列表的字符串不在已完成任务列表, 则放入未完成列表中.
方法二:
把总任务列表和已完成的任务列表, 放入list的集合中,
遍历总完成的任务列表, 使用contains()方法判断已完成列表的字符串是否包含总任务列表中的字符串,
把不包含的放在未完成列表中.
方法三:
把总任务列表和已完成的任务列表, 放入list的集合中,
两个list去重最简单的方法, list1.removeAll(list2)
四 代码
方法一:
final String taskListString = "1,2,3,4,5,6,7,8";
String[] taskArray = taskListString.split(",");
List<String> list = Arrays.asList(taskArray);
List<String> finishedStr = new ArrayList<String>();
finishedStr.add("1");
finishedStr.add("3");
finishedStr.add("4");
List<String> unfinishedStr = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
boolean flag =false;
for (int j = 0; j < finishedStr.size(); j++) {
if(list.get(i).equals(finishedStr.get(j))){
flag = true;
break;
}
}
if(flag == false){
unfinishedStr.add(list.get(i));
}
}
System.out.println(unfinishedStr);
注意点: 在字符串\集合比较的时候, 只能equals 方法, 用==是无法判断的.
方法二:
final String taskListString1 = "1,2,3,4,5,6,7,8";
String[] taskArray = taskListString1.split(",");
List<String> ActionStr = Arrays.asList(taskArray);
final String taskListString2 = "1,3,4";
String[] finishedArray = taskListString2.split(",");
List<String> finishedStr= Arrays.asList(finishedArray);
List<String> unfinishedStr = new ArrayList<String>();
for (String taskStr : ActionStr) {
if(!finishedStr.contains(taskStr)){
unfinishedStr.add(taskStr);
}
}
System.out.println(unfinishedStr);
注意: 使用contain方法时, 字符串B必须是字符串A的子集.
如果字符串B不在A的范围内,也不会显示
方法三:
final String taskListString = "1,2,3,4,5,6,7,8";
String[] taskArray = taskListString.split(",");
List<String> list = Arrays.asList(taskArray);
List<String> finishedStr = new ArrayList<String>();
finishedStr.add("1");
finishedStr.add("3");
finishedStr.add("4");
List<String> newList = new ArrayList<>(list);
newList.removeAll(finishedStr);
System.out.println(newList);
注意: 使用removeAll()方法时, 字符串B必须是字符串A的子集.
否则可能跟你想要的结果有所偏差