사용자 지정 개체가있는 ArrayList에서 특정 문자열 검색
사용자 지정 개체가있는 ArrayList가 있습니다. 이 ArrayList 내부에서 문자열을 검색하고 싶습니다.
객체의 클래스는 다음과 같습니다.
public class Datapoint implements Serializable {
private String stateBased;
private String name;
private String priority;
private String mainNumber;
private String groupadress;
private String dptID;
public Datapoint(){
}
public String getMainNumber() {
return mainNumber;
}
public void setMainNumber(String mainNumber) {
this.mainNumber = mainNumber;
}
public String getName() {
return name;
}
..and so on
ArrayList에서 문자열을 검색하는 방법을 알고 있지만 사용자 지정 개체를 사용하여 ArrayList에서 검색하는 방법은 다음과 같습니다.
ArrayList<String> searchList = new ArrayList<String>();
String search = "a";
int searchListLength = searchList.size();
for (int i = 0; i < searchListLength; i++) {
if (searchList.get(i).contains(search)) {
//Do whatever you want here
}
}
그래서 예를 들어 모든 "이름"문자열에 대해 5 개의 개체를 사용하여 ArrayList에서 검색하는 함수를 갖고 싶습니다.
쉬운 방법은 사용자 지정 개체 for
의 속성 name
에 원하는 문자열 이 있는지 확인 하는 위치 를 만드는 것입니다 .
for(Datapoint d : dataPointList){
if(d.getName() != null && d.getName().contains(search))
//something here
}
나는 이것이 당신을 도울 것이라고 생각합니다.
업데이트 : Java 8 구문 사용
List<DataPoint> myList = new ArrayList<>();
//Fill up myList with your Data Points
List<DataPoint> dataPointsCalledJohn =
myList
.stream()
.filter(p-> p.getName().equals(("john")))
.collect(Collectors.toList());
외부 libaray를 사용해도 괜찮다면 다음과 같이 Google Guava 라이브러리의 술어 를 사용할 수 있습니다 .
class DataPoint {
String name;
String getName() { return name; }
}
Predicate<DataPoint> nameEqualsTo(final String name) {
return new Predicate<DataPoint>() {
public boolean apply(DataPoint dataPoint) {
return dataPoint.getName().equals(name);
}
};
}
public void main(String[] args) throws Exception {
List<DataPoint> myList = new ArrayList<DataPoint>();
//Fill up myList with your Data Points
Collection<DataPoint> dataPointsCalledJohn =
Collections2.filter(myList, nameEqualsTo("john"));
}
이 시도
ArrayList<Datapoint > searchList = new ArrayList<Datapoint >();
String search = "a";
int searchListLength = searchList.size();
for (int i = 0; i < searchListLength; i++) {
if (searchList.get(i).getName().contains(search)) {
//Do whatever you want here
}
}
For a custom class to work properly in collections you'll have to implement/override the equals()
methods of the class. For sorting also override compareTo()
.
See this article or google about how to implement those methods properly.
Probably something like:
ArrayList<DataPoint> myList = new ArrayList<DataPoint>();
//Fill up myList with your Data Points
//Traversal
for(DataPoint myPoint : myList) {
if(myPoint.getName() != null && myPoint.getName().equals("Michael Hoffmann")) {
//Process data do whatever you want
System.out.println("Found it!");
}
}
contains()
method just calls equals()
on ArrayList
elements, so you can overload your class's equals()
based on the name
class variable. Return true
from equals()
if name
is equal to the matching String
. Hope this helps.
Use Apache CollectionUtils
:
CollectionUtils.find(myList, new Predicate() {
public boolean evaluate(Object o) {
return name.equals(((MyClass) o).getName());
}
}
String string;
for (Datapoint d : dataPointList) {
Field[] fields = d.getFields();
for (Field f : fields) {
String value = (String) g.get(d);
if (value.equals(string)) {
//Do your stuff
}
}
}
boolean found;
for(CustomObject obj : ArrayOfCustObj) {
if(obj.getName.equals("Android")) {
found = true;
}
}
'Programing' 카테고리의 다른 글
DbContext에 CommandTimeout을 설정하는 방법은 무엇입니까? (0) | 2020.12.07 |
---|---|
여러 파일의 후행 공백을 제거하는 방법은 무엇입니까? (0) | 2020.12.07 |
.gitmodules에서 경로에 대한 하위 모듈 매핑이없고 .gitmodules 파일이 누락되었습니다. (0) | 2020.12.07 |
조각에서 onCreateView 전에 setUserVisibleHint 호출 (0) | 2020.12.07 |
Sublime Text 3에서 JSX 파일에 대해 Emmet을 어떻게 활성화합니까? (0) | 2020.12.07 |