首页 > 作文

javaindexof函数的用法(java中的substring方法)

更新时间:2023-04-04 06:05:13 阅读: 评论:0

在java8中,我们经常使用lambada表达式进行foreach循环,但是常常我们在遍历list的时候想获取对象的index,但是java8、9、10、11都没有相关的支持,同样的问题也存在于增强型for循环中,很多时候不得不含着泪以 for (孟叔int i = 0; i < list.size(); i++) 的方式写代码

由于篇幅原因,www.887551.com已将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); //如果是t还没有这个方法}

还有…

int i = 0;for (string s : list) {    i++;}

很显然上述的方法并不是我们所想要的

consumer和biconsumer

我们看个简单的例子

consumer<string> consumer = t -> system.out.println(t);consumer.a沮丧ccept("single");biconsumer<string, string> biconsumer = (k, v) -> system.out.println(k+":"+v);biconsumer.accept("multipart","double params");

输出结果:

singlemultipart:double params

这里不难发现我们平时写的箭头函数其实是一个consumer或者biconsumer对象

定制consumer

foreach源码

default void foreach(consumer<? super t> acti10269on) {    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 i说和做课文内容笔记ncrementint = 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:1111:2222:333

ps:这个t也可以用哦,不过在t使用中这个index可不是下标

看完这篇文章你学会了吗?

注意一下咯:由于篇幅原因,www.887551.com已将java相关的知识都集结整理出来了,有需要的私信我关键词 “java”,回复获取免费下载原文件的方式。

本文发布于:2023-04-04 06:05:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/f6d9e73546e9c1a543d28ced8f45d016.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:javaindexof函数的用法(java中的substring方法).doc

本文 PDF 下载地址:javaindexof函数的用法(java中的substring方法).pdf

标签:对象   方法   的是   表达式
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图