查询目录
1.删除list中的元素
public class MainPractice {
public static void main(String[] args) throws ParseException {
ArrayList<String> wslist = new ArrayList<String>();
wslist.add("111");
wslist.add("222");
wslist.add("333");
wslist.add("444");
Iterator<String> iterator = wslist.iterator();
while(iterator.hasNext()) {
String next = iterator.next();
System.out.println("循环内"+next);
if(next.equals("222")) {
iterator.remove();
continue;
}
}
for (String string : wslist) {
System.out.println(string);
}
执行结果:
2.String类型日期转成Date
System.out.println("===========================");
List<User> userlist = new ArrayList<User>();
User u = new User();
// u.setUserId(1);
// u.setNickName("小明");
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sf.parse(sf.format(System.currentTimeMillis()).toString());
// System.out.println("hello"+date);
// u.setBirthday(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
执行结果:
3.比较字符串是否内容相同
String a = "tweh";
if (!MyStringUtil.isBlank(a)) {
if ("iu".equals(a)) {
System.out.println("a的内容是:iu");
}
System.out.println("你好");
}
System.out.println("===========================");
执行结果:
4.删除List中的某个元素
注: 在List中增删元素不要用for循环
List<Integer> alist = new ArrayList<>();
alist.add(1);
alist.add(4);
alist.add(3);
alist.add(9);
alist.add(6);
Iterator<Integer> iteratorr = alist.iterator();
while (iteratorr.hasNext()) {
Integer next = iteratorr.next();
// 引用类型比较要用equals()
if (next.equals(3)) {
iteratorr.remove();
}
}
System.out.println(alist.toString());
System.out.println("===========================");
执行结果:
注意:使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。
为什么要谨慎使用Arrays.asList、ArrayList的subList?.
5.获取字符串中每个元素
/*
* 阿里开发者文档第14条: 使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无 内容的检查,否则会有抛
* IndexOutOfBoundsException 的风险。解决方法:String[] strings=str.split(",",
* -1);
*/
String str = "张三,2,3,4, , , ,6,,,";
char[] stringss=str.toCharArray();
for (int i = 0; i < stringss.length; i++) {
System.out.println(stringss[i]);
}
String[] strings = str.split(",", -1);
for (int i = 0; i < strings.length; i++) {
if (!strings[i].matches("[0-9]*")) {
System.out.println("格式不规范,请用逗号分隔");
// 想结束本次循环跳至下一次循环用continue
continue;
}
System.out.println("i=" + i + " " + strings[i] + " ");
}
System.out.println("字符串个数:" + strings.length);
System.out.println("===========================");
执行结果:
String s = "123456";
List<String> list = Arrays.asList(s.split(""));
List<String> newlist = new ArrayList<String>(list);
System.out.println("测试测试测试"+list);
System.out.println("==================================");
执行结果:
6.截取List子集合,子集合增加元素且不改变/改变原父集合
/*
* 1.ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常
* 2.使用sublist()返回的只是原list对象的一个视图,因此Sublist内部类和ArrayList的内部保
* 存数据的地址是一样得;即它们在内存中是同一个List(集合),只是parentOffset ,size等参数不同
* 3.对原集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生 ConcurrentModificationException 异常
* 4.修改subList的数据就会改变原list的数据,如果达到的效果要对子集进行操作,原始list不改变。建议以 下方式:
* List<Object> tempList = new ArrayList<Object>(list.subList(2,
* lists.size()));
*/
List<String> blist = new ArrayList<String>();
blist.add("d");
blist.add("3wqe3");
blist.add("44");
blist.add("55");
blist.add("66");
// 取得的是下标为3到5的元素,不包含下标为5的元素.
List<String> subblist = blist.subList(3, 5);
subblist.add("sdk");
System.out.println("blist的子串:" + subblist.toString());
System.out.println("blist:" + blist.toString());
System.out.println("++++++++不改变blist的情况下操作subblist++++++++");
List<String> clist = new ArrayList<String>(blist.subList(3, 5));
clist.add("jjj");
System.out.println("clist的内容" + clist);
System.out.println("此时blist的内容:" + blist);
System.out.println("===========================");
执行结果:
7.Lambda 表达式遍历list集合
/*
* 使用 toArray 带参方法,直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它
* 类型数组将出现 ClassCastException 错误
*/
List<String> dlist = new ArrayList<String>();
dlist.add("sdf");
dlist.add("222");
dlist.add("qwqwr4");
dlist.add("rgae");
// Lambda 表达式遍历list集合(JDK 1.8)
dlist.forEach(item -> {
System.out.println("第一种Lambda 表达式遍历dlist: " + item);
});
System.out.println("++++++++++++++++++++++++++");
dlist.forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++");
执行结果:
8.Lambda 表达式,判断List集合中是否包含某字符串
// Lambda 表达式 判断List集合中是否包含字符串“qwqwr4”(JDK 1.8)
System.out.println("\n第1种判断方式:Lambda 表达式,判断List集合中是否包含字符串“qwqwr4”");
dlist.forEach(item -> {
if ("qwqwr4".equals(item)) {
System.out.println(item);
}
});
System.out.println("\n第2种判断方式:Lambda 表达式,判断List集合中是否包含字符串“qwqwr4”");
dlist.stream().filter(item -> item.equals("qwqwr4")).forEach(System.out::println);
System.out.println("\n++++++++++++++++++++++++++");
执行结果:
/*
* 入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址;如果数组元素个数大于实际所需,下标为[
* list.size() ] 的数组元素将被置为 null,其它数组元素保持原值
*/
String[] strs = new String[dlist.size()];
strs = dlist.toArray(strs);
// Lambda 表达式遍历数组(JDK 1.8)
Arrays.asList(strs).forEach(item -> System.out.println("第一种Lambda 表达式遍历strs: " + item));
System.out.println("++++++++++++++++++++++++++");
Arrays.asList(strs).forEach(System.out::println);
System.out.println("===========================");
执行结果:
9.foreach 方法遍历map集合
/*
* Map.foreach 方法遍历map集合
*/
Map<String, String> amap = new HashMap<>(16);
amap.put("1", "张三");
amap.put("2", "赵四");
amap.put("3", "王五");
amap.put("4", "冯柳");
System.out.println("Map.foreach 方法遍历amap集合: ");
amap.forEach((key, value) -> {
System.out.println(key + ":" + value);
});
System.out.println("传统的Map迭代方式: ");
for (Map.Entry<String, String> entry : amap.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("===========================");
执行结果:
10.判断字符串是230还是2.3.0,统一转换成2.3.0格式
/*
* List集合的泛型为自定义类型User 需求是userCode一样的便是同一个对象
*/
//判断字符串是230还是2.3.0,统一转换成2.3.0格式
String versionNameByAndroid = "230";
if (versionNameByAndroid != null && versionNameByAndroid.length()!=0) {
//则字符串不为空或空格
if(!versionNameByAndroid.contains(".")){
versionNameByAndroid = versionNameByAndroid.replace("", ".");
versionNameByAndroid = versionNameByAndroid.substring(1, versionNameByAndroid.length()-1);
}
}
System.out.println(versionNameByAndroid);
System.out.println("==================================");
执行结果:
11.将两个list合并成一个list
String s = "123456";
List<String> list = Arrays.asList(s.split(""));
List<String> newlist = new ArrayList<String>(list);
System.out.println("测试测试测试"+list);
System.out.println("==================================");
//将两个list合并成一个list
List<String> listOne = new ArrayList<String>();
listOne.add("111");
listOne.add("222");
listOne.add("333");
List<String> listTwo = new ArrayList<String>();
listTwo.add("aaa");
listTwo.add("bbb");
listTwo.add("ccc");
//法一:addAll 添加另一集合里面的元素
listOne.addAll(listTwo);
System.out.println(listOne);
//法二:add 添加整个集合包括[]符号
listTwo.add(listOne.toString());
System.out.println(listTwo);
//Stream操作
List<String> destList=Collections.synchronizedList(new ArrayList<>(Arrays.asList("fool")));
List<String> newList=Arrays.asList("1","2","6","3");
newList.stream().sequential().collect(Collectors.toCollection(()->destList));
System.out.println(destList);
System.out.println("==================================");
执行结果:
12.Stream流学习
1)生成流的三种方式
/*
* Stream流学习,特点:同一个流只能使用一次;流不存储值,通过管道的方式获取值;本质是函数式的,对流的操作会生成一个结果,不过并不会修改底层的数据源,集合可以作为流的底层数据源
* 一.生成流的三种方式
* */
//法一: 通过of方法
int[] nums={1,2,3};
Stream stream1=Stream.of(nums);
System.out.println(stream1.toString());//一个对象
System.out.println("==================================");
//法二: 通过数组方式
String[] str3=new String[]{"hello","world"};
Stream stream2=Arrays.stream(str3);
Stream stream3=Stream.of(str3);
//法三:通过集合.stream
List<String> liist=Arrays.asList("helo","ok");
list.stream();
执行结果:
2)流怎么用-入门使用
/*
* 二.流怎么用(入门使用)
* */
//IntStream怎么用, IntStream.of().forEach() 遍历输出
System.out.println("IntStream的常用方法:forEach");
IntStream.of(5,6,7).forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++");
System.out.println("IntStream的常用方法:range(start,end)");
//IntStream.range(start,end),从start排序到(end-1)
IntStream.range(11,18).forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++");
//IntStream.rangeClosed(start,end),,从start排序到end
System.out.println("IntStream的常用方法:rangeClosed(start,end)");
IntStream.rangeClosed(12,15).forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++");
//.sum()求和
System.out.println("IntStream的常用方法:求和sum()");
System.out.println(IntStream.of(nums).sum());
System.out.println("==================================");
执行结果:
小练习: List类型,int的值,对每一个元素*2,然后加起来得到结果;
/*
* List类型,int的值,对每一个元素*2,然后加起来得到结果; reduce(),终止操作,及早求值.
* */
System.out.println("List类型,int的值,对每一个元素*2,然后加起来得到结果:");
List<Integer> zlist=Arrays.asList(1,2,3,4,5,6);
System.out.println(zlist.stream().map(integer->integer*2).reduce(0,Integer::sum));
执行结果:
13.calendar类的使用:当前日期+1/-1
/*
* calendar类的使用:当前日期+1
* */
Calendar cal=Calendar.getInstance();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
SimpleDateFormat sd=new SimpleDateFormat("yyyy.MM");
cal.add(Calendar.DATE, 24);
System.out.println("今日日期加24 "+sdf.format(cal.getTime()));
for (int i = 0; i < 7; i++) {
cal.add(Calendar.DATE,-1);
System.out.println("今日日期减i "+sdf.format(cal.getTime())+" i="+i);
}
for (int i = 0; i < 12; i++) {
cal.add(Calendar.MONTH, -1);
System.out.println("今日日期减i "+sd.format(cal.getTime())+" i="+i);
}
cal.add(Calendar.HOUR, -2);
Date dat=new Date();
Date creatAt = sdf.parse("2020.10.23 16:57:53");
System.out.println("今日时间减2小时 "+sdf.format(cal.getTime()));
int result = creatAt.compareTo(cal.getTime());
System.out.println("已过期:"+result);
System.out.println("==================================");
执行结果:
14.截取字符串
/*
* 截取字符串
* */
String url="http://10.69.11.184:8080/admin/countData?task=42&target=漫画名称";
String re=url.substring(url.lastIndexOf("=")+1);
System.out.println("想获取target=漫画名称 "+re); //结果:漫画名称
System.out.println("==================================");
String url2="\"task\":\"48\",\"version\":\"2.5.2\",\"os\":\"Android\",\"uid\":\"907ab225-f3d6-4293-a10b-0a6a74361633\"";
String re2=url2.substring(url2.indexOf("task")+7,url2.indexOf(",\"version")-1);
System.out.println("想获取task的位置 "+re2); //结果:漫画名称
String url3="2020-09-23 15:21:35-------------{\"task\":\"51\",\"target\":\"开屏页\"}";
String re4=url3.substring(url3.indexOf("task")+7,url3.indexOf(",\"target")-1);
String re3=url3.substring(url3.indexOf("target")+9,url3.length()-2);
System.out.println("想获取target的位置 "+re3); //结果:漫画名称
System.out.println("想获取task的位置 "+re4); //结果:漫画名称
String url4="{\"tradeStateDesc\":\"订单未支付\",\"tradeState\"}}";
String re5=url4.substring(url4.indexOf("tradeStateDesc")+17,url4.indexOf("\",\"tradeState"));
System.out.println("想获取status的位置 "+re5); //结果:漫画名称
//字符串拼接
System.out.println("==================================");
ArrayList<String> wlist = new ArrayList<String>();
wlist.add("111");
wlist.add("222");
wlist.add("333");
wlist.add("444");
String pre = "前缀";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < wlist.size(); i++) {
sb.append(wlist.get(i));
}
System.out.println("字符串拼接 "+sb.toString()); //结果:111222333444
System.out.println("==================================");
}
}
执行结果: