我想在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
?
答案 0 :(得分:1)
您可能正在寻找Map
。映射允许您通过可哈希键(例如名称字符串)来标识值。流行的实现包括HashMap
和TreeMap
。前者通常更快,而后者则排序:
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;
}
}
这种方法的优点:
count
的项目。List
,以便保留您的插入顺序。