假设存在不同类型的不同文件。例如razi.mp3,大小为10mb,test.txt为5 mb,song.mp3为20mb,file.js为100mb,mark.txt为10mb,zoom.js为50mb。我需要打印总大小的文件类型。在这种情况下,我要打印: mp3:30mb 文本:15mb js:150mb 我可以通过在Java中使用map或任何其他解决方案来解决此问题吗?
基本上,我想将map与比较器接口一起使用。任何其他方式都是最欢迎的。
任何类型的帮助和努力都是非常可观的。在此先感谢所有对此问题感兴趣的人。
答案 0 :(得分:1)
是的。您可以通过地图解决此问题。
public class FileMeta {
String name;
String extension;
int size;
public FileMeta(String name, String extension, int size) {
this.name = name;
this.extension = extension;
this.size = size;
}
public String getName() {
return name;
}
public FileMeta setName(String name) {
this.name = name;
return this;
}
public String getExtension() {
return extension;
}
public FileMeta setExtension(String extension) {
this.extension = extension;
return this;
}
public int getSize() {
return size;
}
public FileMeta setSize(int size) {
this.size = size;
return this;
}
}
public static void main(String[] args) {
Map<String, List<FileMeta>> map = new ConcurrentHashMap<>();
FileMeta obj1 = new FileMeta("razi", "mp3", 10);
FileMeta obj2 = new FileMeta("test", "txt", 5);
FileMeta obj3 = new FileMeta("song", "mp3", 20);
FileMeta obj4 = new FileMeta("file", "js", 100);
FileMeta obj5 = new FileMeta("mark", "txt", 10);
FileMeta obj6 = new FileMeta("zoom", "js", 50);
putinMap(map, obj1);
putinMap(map, obj2);
putinMap(map, obj3);
putinMap(map, obj4);
putinMap(map, obj5);
putinMap(map, obj6);
map.entrySet().stream().forEach(entry-> {
int size = entry.getValue().stream().mapToInt(FileMeta::getSize).sum();
System.out.println(entry.getKey() + " : " + size + " mb");
});
}
private static void putinMap(Map<String, List<FileMeta>> map, FileMeta obj) {
if (map.containsKey(obj.getExtension())) {
map.get(obj.getExtension()).add(obj);
} else {
ArrayList<FileMeta> list = new ArrayList<>();
list.add(obj);
map.put(obj.getExtension(), list);
}
}
其中的键是文件类型,例如mp3或txt,值是由一些对象组成,这些对象包含名称,文件大小和扩展名。
您必须在每一行和每个文件大小的总和上进行迭代。
答案 1 :(得分:0)
您可以创建一个FileObject类,其实例成员的名称为,inputstream,大小和类型。
@Getter
@Setter
public class FileObject {
private String name;
private InputStream inputStream;
private String type;
private Long size;
public FileObject(String name, InputStream inputStream, String type, Long size) {
this.name = name;
this.inputStream = inputStream;
this.type = type;
this.size = size;
}
}
使用数据创建FilObject数组。
然后,您可以创建一个类型属性为键的Map(初始值对应为0),然后为每个Fileobject的大小值添加到映射中的相应键。
Map<String, FileObject> fileObjectMap = new HashMap<>();
之后,您将能够打印所需的输出。
希望对您有所帮助。
答案 2 :(得分:0)
以下作品:
Nova
公共类主要{
import java.util.*;
}