2012-09-19 2 views
36

사용자 객체가있는 ArrayList가 있습니다. 이 ArrayList 내부에서 String을 검색하려고합니다.특정 문자열에 대한 사용자 정의 객체를 사용하여 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 
} 
} 
:

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에 그렇게하는 방법을 알고

그래서 모든 "이름"문자열에 대해 예를 들어 5 개의 개체를 사용하여 ArrayList를 검색하는 기능이 필요합니다.

답변

69

쉬운 방법은 for를 만드는 것입니다.

+0

도 시도했지만 내 문자열을 찾지 못했습니다. ArrayList를 String으로 변환하면이 [[[true] [Wippe rechts] [1.001] [1.001] [Low] [1]], [낮음] [2]], [진정한] [Temperaturwert] [7] [7.001] [낮음] [256]] [샬렁 (상태)] [1.001] [낮음] [257 ]]]' –

+0

그 예에서 찾고자하는 String은 무엇입니까? –

+0

'String search = "1.001"; ' –

5

같은이 아마

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 
} 
} 
+1

getName()이 설정되지 않은 경우 NullPointerException이 발생합니다. – gtgaxiola

+1

그냥 특정 개체에 대한 모든 값이 설정되어 있다고 생각하십시오. –

+0

좋다! @Sharath G – gtgaxiola

3

뭔가 시도 : 당신이 오버로드 할 수 있습니다

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!"); 
    } 
} 
2

contains() 메소드는, equals()ArrayList의 요소를 호출을 name 클래스 변수에 따라 클래스의 equals()가. name이 일치하는 String과 같으면 trueequals()에서 반환하십시오. 희망이 도움이됩니다.

+0

다른 사람을 검색 할 수 없습니까? – gtgaxiola

+0

@gtgaxiola, 그렇습니다. 또한 디자인 측면에서도 좋은 결정이 아니지만 일반적으로 다른 데이터 유형을 비교하는 것은 좋지 않습니다. – Egor

4

맞춤 클래스가 컬렉션에서 제대로 작동하려면 클래스의 equals() 메소드를 구현/재정의해야합니다. 정렬의 경우 또한 compareTo()을 무시하십시오.

해당 방법을 올바르게 구현하는 방법은 this article 또는 google을 참조하십시오. 사용자 정의 개체의 atrrtibute name 원하는 문자열

for(Datapoint d : dataPointList){ 
     if(d.getName() != null && d.getName().contains(search)) 
      //something here 
    } 

나는이 당신을 도와줍니다 생각이 있다면 당신은 확인 어디

0
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 
     }  
    } 
} 
32

UPDATE : 외부 libaray를 사용하여 괜찮다면

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()); 

자바 (8) 구문을 사용하여 - 다음과 같이 당신이 Google Guava library에서 Predicates를 사용할 수 있습니다

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")); 

} 
+1

자바 8에서만 슬프게도 작동합니다 ... – nterry

+0

마지막으로 자바 8 기능 표기법 있어요. 룰츠! –

+0

안드로이드가 더 낮은 API에서 Java 8을 안고 있기 때문에 Java 7과 비슷한 솔루션이 필요합니다. –

1

사용 Apache CollectionUtils :

CollectionUtils.find(myList, new Predicate() { 
    public boolean evaluate(Object o) { 
     return name.equals(((MyClass) o).getName()); 
    } 
} 
관련 문제