繁体   English   中英

列表中的重复值<String>在构造函数java中

[英]Recurring values in List<String> in Constructor java

示例.java

public class Sample {


static List<Object> list1 = new ArrayList<Object>();
static List<String> list = new ArrayList<String>();

private String value;

private String type;

static List<String> types = new ArrayList<String>();

public Item() throws ParseException {
    JsontoList j = new JsontoList();
    // types = Arrays.asList("green", "yellow", "red");
    array = j.getarray();
    list1 = j.toList(array);
    list = j.getList(array);
    types=list;

}

public List<String> getTypes() {
    return types;
}

//public void setTypes(List<String> types) {
    //this.types = types;
//}

使用上面的代码..我能够成功显示一个Bootsfaces表。点击添加命令按钮..文本字段下拉列表在每列中一一添加,输入值保存在JSON中。 但问题是..无论何时点击ADD .. 以及 TextField 和 Dropdown..数据库中的 Dropdown 值每次也会被添加,从而产生许多值。

虽然我尝试不从项目构造函数中的数据库访问下拉值......但这些值没有被加载到网页中,除了在构造函数中。

请建议任何其他方法。任何帮助将不胜感激。提前谢谢。

我已经得到了解决方案,这奏效了-

Item.java 中

public Item() throws ParseException {
JsontoList j = new JsontoList();
array = j.getarray();
list1 = j.toList(array);
list = j.getList(array);

List<String> types = new ArrayList<String>();
types = list;

//Added this piece of code below

Set<String> hs = new HashSet<>();
// add elements to List types, including duplicates
hs.addAll(types);
types.clear();
types.addAll(hs);
}

为了删除集合中的重复项,我们应该考虑为什么我们使用允许重复项的集合。 删除重复元素的最简单方法是将内容添加到 Set(不允许重复),然后将 Set 添加回 ArrayList。

我只能猜测(因为我不知道如何编译您的源代码),但是有一条非常可疑的线路。 看看Item@PostConstruct方法。 它一遍又一遍地初始化静态变量types 这可能是读取数据库并将结果添加到已经存在的数组types

通常,我建议在使用静态变量时要非常小心。 它们只需初始化一次。 实际上,多次初始化静态变量会导致各种奇怪的错误。 您必须记住,JSF 应用程序总是被许多用户使用。 换句话说,有许多线程访问一个且唯一的静态变量。 如果用户 A 修改了用户 B 刚刚读取的静态变量,会发生什么情况? 最低限度的保护是synchronized块以及检查变量是否已经初始化。

2017 年 1 月 10 日更新:生成的源代码大致如下:

public class Item {
  private static List<String> types = null;

  public Item() throws ParseException {
    synchronized(types) {
      if (null==types) {
        JsontoList j = new JsontoList();
        String array = j.getarray();
        types = j.getList(array);
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM