Java列表重复
我有一种方法可以打印专业人员列表,在这种情况下,我不能为专业人员的姓名提供副本。 我希望创造另一个条件,不让我有超过3个类别,即医学、护士、助理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++) {
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)
,值无效导致编译器错误驱动程序
列表
当前是否有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 ) ;