2015-01-07 2 views
-1

성적, 과목 및 연도가있는 목록이 있지만 주어진 주제와 연도에 이미 등급이 있는지를 확인하도록하고 싶습니다. 목록에서 검색하는 방법을 찾아보십시오. 이 같은특정 요소가 이미 ArrayList에 있는지 검색합니다.

public List<Nota> notas; 
public Double notaMedia; 

//Constructor 
public ExpedienteImpl() { 
    this.notas = new ArrayList<Nota>(); 
    this.notaMedia = getNotaMedia(); 
} 

private void checkNota(Integer cursoAcademico, TipoConvocatoria tipoConvocatoria, Asignatura asignatura){ 
    if (this.notas.contains()){ 

    } 
} 

뭔가 내가 한 일이지만, 단지 포함하는 하나의 객체 (?)와 함께 작동 내가 주어진 cursoAcademico, tipoConvocatoria 및 asignatura (물론 용의 Nota 필드에 아무것도가 있는지 검색 할 , 주제).

의 Nota의 코드 : 당신이 더 필요한 경우

public interface Nota { 

Asignatura getAsignatura(); 

Integer getCursoAcademico(); //Dado por el primer año del curso, eg: 2014/15 -> 2014 

TipoConvocatoria getTipoConvocatoria(); //Primero, segundo o tercero 

Double getValorNota(); 
TipoNota getTipoNota(); //0-5 Supenso, 5-7 Aprobado, 7-9 Notable, 9-10 Sobresaliente, 9-10 + mención = Matrícula de Honor, 
Boolean getMencionHonor(); 


} 

public class NotaImpl implements Nota { 

//Atributos 
private Integer cursoAcademico; 
private TipoConvocatoria tipoConvocatoria; 
private Double valorNota; 
private TipoNota tipoNota; 
private Boolean mencionHonor; 
private Asignatura asignatura; 

//Constructores 
public NotaImpl(Asignatura asignatura, Integer cursoAcademico, TipoConvocatoria tipoConvocatoria, Double valorNota, TipoNota tipoNota, Boolean mencionHonor) { 
    checkerNumero(valorNota); 
    checkerMencion(mencionHonor, valorNota); 
    this.cursoAcademico = cursoAcademico; 
    this.tipoConvocatoria = tipoConvocatoria; 
    this.tipoNota = tipoNota; 
    this.valorNota = valorNota; 
    this.mencionHonor = mencionHonor; 
} 

확실하지.

+1

'Nota' 코드를 보내주십시오. –

+2

'HashList'가 무엇인지 전혀 알지 못합니다. – chrylis

+0

'Nota' 클래스에있는 필드와 메소드는 무엇입니까? –

답변

0

목록을 반복하면서 개체를 가져 와서 비교해야합니다. 가장 쉬운 방법은 표시 등을 사용하여 노아 객체를 만드는 것입니다. Nota의 equals 메소드를 대체합니다.

이제 contais를 사용하여 표시되는지 확인하십시오.

import java.util.ArrayList; 
import java.util.List; 

public class ExpedienteImpl { 

    public List<Nota> notas; 
    public Double notaMedia; 

    //Constructor 
    public ExpedienteImpl() { 
     this.notas = new ArrayList<Nota>(); 
     this.notaMedia = getNotaMedia(); 
    } 

    private Double getNotaMedia() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    private void checkNota(Integer cursoAcademico, TipoConvocatoria tipoConvocatoria, Asignatura asignatura){ 
     Nota objNota = new NotaImpl(asignatura, cursoAcademico, tipoConvocatoria, 0.0, null, null); 
     if(notas.contains(objNota)){ 
       System.out.println("Nota matched"); 
     } 
    } 

} 

interface Nota { 

Asignatura getAsignatura(); 

Integer getCursoAcademico(); //Dado por el primer año del curso, eg: 2014/15 -> 2014 

TipoConvocatoria getTipoConvocatoria(); //Primero, segundo o tercero 

Double getValorNota(); 
TipoNota getTipoNota(); //0-5 Supenso, 5-7 Aprobado, 7-9 Notable, 9-10 Sobresaliente, 9-10 + mención = Matrícula de Honor, 
Boolean getMencionHonor(); 


} 

class NotaImpl implements Nota { 

//Atributos 
private Integer cursoAcademico; 
private TipoConvocatoria tipoConvocatoria; 
private Double valorNota; 
private TipoNota tipoNota; 
private Boolean mencionHonor; 
private Asignatura asignatura; 

//Constructores 
public NotaImpl(Asignatura asignatura, Integer cursoAcademico, TipoConvocatoria tipoConvocatoria, Double valorNota, TipoNota tipoNota, Boolean mencionHonor) { 
    checkerNumero(valorNota); 
    checkerMencion(mencionHonor, valorNota); 
    this.cursoAcademico = cursoAcademico; 
    this.tipoConvocatoria = tipoConvocatoria; 
    this.tipoNota = tipoNota; 
    this.valorNota = valorNota; 
    this.mencionHonor = mencionHonor; 
} 

private void checkerMencion(Boolean mencionHonor2, Double valorNota2) { 
    // TODO Auto-generated method stub 

} 

private void checkerNumero(Double valorNota2) { 
    // TODO Auto-generated method stub 

} 

@Override 
public Asignatura getAsignatura() { 
    return null; 
} 

@Override 
public Integer getCursoAcademico() { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public TipoConvocatoria getTipoConvocatoria() { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public Double getValorNota() { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public TipoNota getTipoNota() { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public Boolean getMencionHonor() { 
    // TODO Auto-generated method stub 
    return null; 
} 

public boolean equals(Nota nota){ 
    if(this.getCursoAcademico().equals(nota.getCursoAcademico())) 
     return true; 
    return false; 
} 
} 


class Asignatura{ 
} 

class TipoConvocatoria{ 

} 

class TipoNota{ 

} 

동등한 기준을 만족하는 방식으로 equals 메소드를 업데이트하십시오.

+0

그래서 비교할 객체로 '작은 목록'을 만들 수 있고, 다른 목록을 반복하고 매번 같음을 사용할 수 있습니까? 도와 줘서 고마워. –

+1

그는 자신의 요구 사항에 따라 equals를 구현하면 왜 List를 반복합니까? contains 메소드는 정상적으로 작동합니다. – Stultuske

+0

@BrickTop 다른 목록이 필요하지 않습니다. 비교를위한 임시 객체 일 뿐이므로이를 직접 반복하지 않아도됩니다. 대신'List # contains'를 사용하십시오. – Tom

0

전체 목록을 탐색 한 다음 각 개체의 필드를 param과 비교할 수 있습니다.

+0

요점은 List를 반복하는 것이 아니라, contains()와 같은 메소드를 호출하는 것입니다. – Stultuske

0

Java 8을 사용하는 경우 Stream API가 여기에 적합 할 수 있습니다. 당신이 당신의 일치를 필터링 할 수 있습니다

// Filter out all Nota-objects that match the provided input 
// and store them in a list 
final List<Nota> filtered = this.notas.stream() 
    .filter(nota -> { 
     return nota.getCursoAcademico().equals(cursoAcademico) && 
       nota.getTipoConvocatoria().equals(tipoConvocatoria) && 
       nota.getAsignatura().equals(asignatura); 
    }) 
    .collect(Collectors.toList()); 

// Or, count the number of matching objects 
final long count = this.notas.stream() 
    .filter(nota -> { 
     return nota.getCursoAcademico().equals(cursoAcademico) && 
       nota.getTipoConvocatoria().equals(tipoConvocatoria) && 
       nota.getAsignatura().equals(asignatura); 
    }) 
    .count(); 

이 방법은 TipoConvocatoriaAsignatura가 가지고있는이 방법을 동일 한한다.

스트림에 대한 자세한 내용은 here을 참조하십시오. 특히 filter -method를 확인할 수 있습니다.

0

C#에서이은 다음과 같습니다

:

public class Grade{ 
    public int Mark { get; set; } 
    public string Subject { get; set; } 
    public int Year { get; set; } 
} 

이제이 같은 주제 및 연도와 등급은 당신이 쓰는 것이 존재하는지 확인하려는 경우 일부 데이터

var grades = new List<Grade>() 
{ 
    new Grade() {Mark = 3, Subject = "Calculus II", Year = 2015}, 
    new Grade() {Mark = 2, Subject = "Calculus II", Year = 2014} 
}; 
var grade = new Grade() {Mark = 10, Subject = "Calculus II", Year = 2015}; 

이 있다고 할 수 있습니다

if (!grades.Any(o => o.Subject == grade.Subject && o.Year == grade.Year)) 
{//does not exists - add 
    grades.Add(grade); 
} 
else 
{//exists 

} 

Java 1.4, 1.5, 6, 7에서는 람다가 없으므로 쓰기가 다소 복잡 할 수 있습니다. 꽤 많은 상용구 코드가 필요합니다. 그러나 형식적으로 Google Collections라고하는 Google Guava이 있는데, 이는 Java 6까지 지원합니다 (이전에는 Java 1.5 이하 였지만 atm은 확실하지 않았습니다). Appache Collections라는 대안도 있는데, 대부분은 똑같은 일을 조금씩 다르게합니다. 어떤 경우

당신은

Predicate<Integer> isEven = new Predicate<Grade>() { 
    @Override public boolean apply(Grade item) { 
     return item.Subject == grade.Subject && item.Year == grade.Year; 
    }    
}; 
if (Iterables.filter(grades, isEven).isEmpty()) 
{//does not exists - add 
    grades.Add(grade); 
} 
else 
{//exists 

} 

이 침해 자바의 익명 함수의 변수 범위 가시성을 쓸 수 있지만 그것을 읽고 매우 깨끗하고 쉽게 뛰어난 성능을 가지고 있으며, 자바 1.5까지 작동합니다. iterables에 .isEmpty()이없는 경우 과 거의 같습니다.크기() < = 0. (슬프게도 나는 자바를 쓰는 데 돈을받지 않는다. 그래서 dev 환경을 점검 할 준비가되어 있지 않다. 이것은 방금 메모리에서 작성된 것이다.)

관련 문제