如何获取Arraylist的名称Java

时间:2019-12-20 16:07:20

标签: java string list arraylist

我想在Java中获取给定[HttpPost("{username}")] public IActionResult UploadPhoto(string username, [FromForm] IFormFile photo) { try { var user = _userService.GetCurrentUser(username); if (user == null) return NotFound(); var path = Path.Combine(_hosting.WebRootPath, "usersImages"); if (!Directory.Exists(path)) Directory.CreateDirectory(path); var fileName = Guid.NewGuid().ToString() + Path.GetExtension(photo.FileName); var filePath = Path.Combine(path, fileName); photo.CopyTo(new FileStream(filePath, FileMode.Create)); user.ImageUrl = fileName; _userService.UpdateUser(user); return Ok(user); } catch (Exception e) { var error = new ErrorViewModel("Something went wrong. Please contact support!", HttpStatusCode.BadRequest); return new JsonResult(error) { StatusCode = error.StatusCode }; } } 的名称。

例如:

ArrayList

如果我想执行以下操作,Arraylist<Arraylist> listOfArrays Arraylist<String> stringListOne (lets say this has 3 elements) Arraylist<String> stringListTwo (this one too) listOfArrays.add(stringlistOne); listOfArrays.add(stringlistTwo); ...它只是给我String listName = listOfArrays.get(1) List

但是我需要列表的名称stringlistTwo,尽管我没有找到任何方法。

有可能吗?

还是我需要用"stringlistTwo"的名字创建一个List

2 个答案:

答案 0 :(得分:1)

您可能正在寻找Map。映射允许您通过可哈希键(例如名称字符串)来标识值。流行的实现包括HashMapTreeMap。前者通常更快,而后者则排序:

Map<String, List<String>> mapOfLists = new HashMap<>();

Arraylist<String> stringListOne (lets say this has 3 elements)
Arraylist<String> stringListTwo (this one too)

mapOfLists.put("StringListOne", stringListOne);
mapOfLists.put("StringListTwo", stringListTwo);

您现在可以按名称访问列表了:

List<String> someList = mapOfLists.get("StringListTwo");

这与您的示例中的不完全一样。不建议使用可变对象作为键,因为哈希值可能会发生变化。相反,您可能只想将索引映射到名称。您不必为此专门使用Map对象,因为List可以解释为将连续的非负整数映射到值的特殊情况。最简单的解决方案可能是创建与listOfArrays平行的名称列表:

List<String> listOfNames = new ArrayList<>();
listOfNames.add("StringListOne");
listOfNames.add("StringListTwo");

现在您可以做

String nameOfFirstList = listOfNames.get(0);

答案 1 :(得分:0)

除了已经提出的解决方案之外,如果您灵活使用自定义类,则可以创建元数据类并将其添加到列表中,就像这样

public static void main(String[] args) {

    List<String> StringListOne = new ArrayList<>();
    // add values
    List<String> StringListTwo = new ArrayList<>();
    // add values

    List<ListMetadata> metadataList = new ArrayList<>();
    metadataList.add(new ListMetadata("StringListOne", StringListOne));
    metadataList.add(new ListMetadata("StringListTwo", StringListTwo));

    // get first list name
    String firstListName = metadataList.get(0).getName();

    // get list of all names
    List<String> names = metadataList.stream().map(ListMetadata::getName).collect(Collectors.toList());
}

static class ListMetadata {
    String name;
    List<String> value;

    public ListMetadata(String name, List<String> value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public List<String> getValue() {
        return value;
    }
}

这种方法的优点:

  1. 您将来可以添加更多的元信息。例如,列表中count的项目。
  2. 使用List,以便保留您的插入顺序。