javaindexof函数的用法(java中的substring方法)
程序员文章站
2022-07-11 13:41:59
在java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历list的时候想获取对象的index,但是java8、9、10、11都没有相关的支持,同样的问题也存在于增强型...
在java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历list的时候想获取对象的index,但是java8、9、10、11都没有相关的支持,同样的问题也存在于增强型for循环中,很多时候不得不含着泪以 for (int i = 0; i < list.size(); i++) 的方式写代码
由于篇幅原因,小编已将java系列知识都整理出来了,有需要的私信我关键词 “java”,回复获取免费下载原文件的方式。
我们的期望
list.foreach((item,index)->{}) //编译不通过
常见的list获取index方法
for(int i=0;i<list.size();i++>)
for (int i = 0; i < list.size(); i++) {
}
indexof(obj)
for (object o : list) {
list.indexof(o); //如果是set还没有这个方法
}
还有…
int i = 0;
for (string s : list) {
i++;
}
很显然上述的方法并不是我们所想要的
consumer和biconsumer
我们看个简单的例子
consumer<string> consumer = t -> system.out.println(t);
consumer.accept("single");
biconsumer<string, string> biconsumer = (k, v) -> system.out.println(k+":"+v);
biconsumer.accept("multipart","double params");
输出结果:
single
multipart:double params
这里不难发现我们平时写的箭头函数其实是一个consumer或者biconsumer对象
定制consumer
foreach源码
default void foreach(consumer<? super t> action) {
objects.requirenonnull(action);
for (t t : this) {
action.accept(t);
}
}
分析源码可知,我们的list foreach方法传入的是consumer对象,支持一个参数,而我们想要的是item,index两个参数,很明显不满足,这时我们可以自定义一个consumer,传参是biconsumer,这样就能满足我们需求了,代码如下:
import java.util.arraylist;
import java.util.list;
import java.util.function.biconsumer;
import java.util.function.consumer;
public class lambadatools {
/**
* 利用biconsumer实现foreach循环支持index
*
* @param biconsumer
* @param <t>
* @return
*/
public static <t> consumer<t> foreachwithindex(biconsumer<t, integer> biconsumer) {
/*这里说明一下,我们每次传入foreach都是一个重新实例化的consumer对象,在lambada表达式中我们无法对int进行++操作,
我们模拟atomicinteger对象,写个getandincrement方法,不能直接使用atomicinteger哦*/
class incrementint{
int i = 0;
public int getandincrement(){
return i++;
}
}
incrementint incrementint = new incrementint();
return t -> biconsumer.accept(t, incrementint.getandincrement());
}
}
调用示例:
list<string> list = new arraylist();
list.add("111");
list.add("222");
list.add("333");
list.foreach(lambadatools.foreachwithindex((item, index) -> {
system.out.println(index +":"+ item);
}));
输出结果如下:
0:111
1:222
2:333
ps:这个set也可以用哦,不过在set使用中这个index可不是下标
看完这篇文章你学会了吗?
注意一下咯:由于篇幅原因,小编已将java相关的知识都集结整理出来了,有需要的私信我关键词 “java”,回复获取免费下载原文件的方式。
上一篇: 2020年,如何打造私域流量?创利树助力商家实现数字化转型
下一篇: 网站降权的原因和解决办法
推荐阅读
-
smarty模板引擎中自定义函数的方法
-
smarty模板引擎中内建函数if、elseif和else的使用方法
-
MySql 中聚合函数增加条件表达式的方法
-
python中string模块各属性以及函数的用法介绍
-
strpos() 函数判断字符串中是否包含某字符串的方法
-
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
-
C# 中indexOf、lastIndexOf、subString方法的理解
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
-
JS中超越现实的匿名函数用法实例分析
-
C#中Arraylist的sort函数用法实例分析