Java 如何在ArrayList中搜索数据<;StringBuilder>;带索引
如何使用indexOf在ArrayList中搜索数据Java 如何在ArrayList中搜索数据<;StringBuilder>;带索引,java,search,arraylist,stringbuilder,indexof,Java,Search,Arraylist,Stringbuilder,Indexof,如何使用indexOf在ArrayList中搜索数据 ArrayList<StringBuilder> state = new ArrayList<StringBuilder>(); state.add(new StringBuilder("A")); state.add(new StringBuilder("B")); state.add(new StringBuilder("C")); state.add(new StringBuilder("D")); System
ArrayList<StringBuilder> state = new ArrayList<StringBuilder>();
state.add(new StringBuilder("A"));
state.add(new StringBuilder("B"));
state.add(new StringBuilder("C"));
state.add(new StringBuilder("D"));
System.out.println(state.indexOf(new StringBuilder("B"))); //Out: -1
ArrayList state=new ArrayList();
添加(新的StringBuilder(“A”));
添加(新的StringBuilder(“B”));
添加(新的StringBuilder(“C”));
添加(新的StringBuilder(“D”));
System.out.println(state.indexOf(新StringBuilder(“B”))//出局:-1
这是因为它通过引用进行搜索,而您希望通过字符串生成器的内容进行搜索
boolean there = state.stream() // use streams API
.anyMatch(sb -> sb.toString().equals("B")); // check string equals
System.out.println(there); // print if it's there
您正在使用
StringBuilder
对象的ArrayList
由于StringBuilder
用于构建字符串,而不是实际的String
s,因此不能使用indexOf(s)
,因为整个对象本身应该与正在比较的对象相等,以便返回true
为了解决此问题,您应该使用StringBuilder
以您想要的方式构建String
,并仅为已构建的String
创建一个数组列表,如下所示:
ArrayList<String> state = new ArrayList<String>();
StringBuilder a = new StringBuilder("A")
//Do whatever you want to a
state.add(a.toString());
state.add(b.toString());
state.add(c.toString());
state.add(d.toString());
.....
System.out.println(state.indexOf("B")); //Out: 1
ArrayList state=new ArrayList();
StringBuilder a=新的StringBuilder(“a”)
//你想做什么就做什么
state.add(a.toString());
state.add(b.toString());
state.add(c.toString());
state.add(d.toString());
.....
System.out.println(state.indexOf(“B”))//输出:1
StringBuilder不会覆盖equals,因此您无法使用。请使用String而不是StringBuilder您实际要解决的问题是什么?