Java列表重复

Java列表重复,java,class,object,methods,Java,Class,Object,Methods,我有一种方法可以打印专业人员列表,在这种情况下,我不能为专业人员的姓名提供副本。 我希望创造另一个条件,不让我有超过3个类别,即医学、护士、助理 public void RegistarProfissional(List<Profissional> rProfissional, String nomeP, String categoriaP) { int i = 0; for (; i < rProfissional.size(); i++) {

我有一种方法可以打印专业人员列表,在这种情况下,我不能为专业人员的姓名提供副本。 我希望创造另一个条件,不让我有超过3个类别,即医学、护士、助理

public void RegistarProfissional(List<Profissional> rProfissional, String nomeP, String categoriaP) {
    int i = 0;
    for (; i < rProfissional.size(); i++) {
        if (rProfissional.get(i).nomeP.equals(nomeP)) {
            System.out.println("Existing Professional, error.");
            break;
        }

        if (i == rProfissional.size()) {
            rProfissional.add(new Profissional(nomeP, categoriaP));
            System.out.println("Professional registered");
        }
    }
}
public void registarprofessional(列出专业、字符串nomeP、字符串categoriaP){
int i=0;
对于(;i
我自己找到的。 只需在主文件上创建此条件:

if(!categoriaP.equals("Medicina") && !categoriaP.equals("Enfermagem") && !categoriaP.equals("Auxiliar")) {
                        System.out.println("Categoria inexistente");
                        continue;
                    }
无论如何,谢谢你(调整你的英语术语)

验证规则 听起来您正在尝试验证现有列表中的数据。您似乎有一对验证规则的标准:

  • Professional
    对象列表中不能有重复的人名
  • 每个
    Professional
    对象必须带有
    Professional
    属性,该属性具有三个值之一:护士、医生、助理
我们将忽略现实世界中两个人可能同名的实际问题

我们的
专业
课程

package work.basil.example;

public class Professional
{
    public String name, category;

    public Professional ( String name , String category )
    {
        this.name = name;
        this.category = category;
    }
}
虚拟数据

List < Professional > pros = List.of(
        new Professional( "Alice" , "physician" ) ,
        new Professional( "Bob" , "nurse" ) ,
        new Professional( "Carol" , "assistant" ) ,
        new Professional( "David" , "physician" )
);
我们可以简化这项工作。这种方法也有同样的效果

Stream < Professional > prosStream = pros.stream();
boolean foundDuplicateName =
        prosStream
                .anyMatch( ( Professional pro ) -> pro.name.equalsIgnoreCase( targetName ) )
;
if ( foundDuplicateName )
{
    System.out.println( "Validation violation. Duplicate name found: " + targetName );
    return;
}
枚举 您应该使用枚举,而不是仅为
类别
值使用字符串。Java有一个简单但功能强大且灵活的枚举工具,比大多数语言要好得多。看

将我们的
Professional
类更改为使用enum而不仅仅是字符串

package work.basil.example;

public class Professional
{
    public String name;
    Category category;

    public Professional ( String name , Category category )
    {
        this.name = name;
        this.category = category;
    }
}
实例化如下:

Professional pro = new Professional( "Alice" , Category.PHYSICIAN ) ;
这将消除对作为预期值之一的类别的检查验证测试。没有任何
Professional
对象会被实例化为
Category
的无效值,因为所有可能的值都已定义,并且编译器会检查类型和值。任何此类尝试都将失败:

  • 新专业人士(“爱丽丝”,“司机”)
    ➙ 由于类型不匹配导致编译器错误,第二个参数是
    String
    对象,其中需要
    类别
    枚举对象
  • new Professional(“Alice”,Category.DRIVER)
    ➙ 由于枚举类上未定义此类枚举对象
    驱动程序
    ,值无效导致编译器错误

我看不出这里有什么问题。你可能想用一个来表示类别,而不是一个字符串。@SephB我破译了它,但他更多的是要求我们编写一个额外的要求,而不是修复他当前发布的任何内容。他想添加另一个条件来检查
列表
当前是否有3个以上的类别,而新的“professional”是第4个不同的类别,不要将其添加到列表中,而是出错。我想在列表中插入categoriaP对象时创建另一个条件,我已经尝试了很多方法,但是没有一种是有效的
Stream < Professional > prosStream = pros.stream();
boolean foundDuplicateName =
        prosStream
                .anyMatch( ( Professional pro ) -> pro.name.equalsIgnoreCase( targetName ) )
;
if ( foundDuplicateName )
{
    System.out.println( "Validation violation. Duplicate name found: " + targetName );
    return;
}
if (  pros.stream().anyMatch( ( Professional pro ) -> pro.name.equalsIgnoreCase( targetName ) ) )
{
    System.out.println( "Validation violation. Duplicate name found: " + targetName );
    return;
}
package work.basil.example;

public enum Category
{
    NURSE , PHYSICIAN , ASSISTANT ;
}
package work.basil.example;

public class Professional
{
    public String name;
    Category category;

    public Professional ( String name , Category category )
    {
        this.name = name;
        this.category = category;
    }
}
Professional pro = new Professional( "Alice" , Category.PHYSICIAN ) ;