我想 覆盖 系统输出打印(map) 到 不打印
{A=1, B=2, C=3,...}
但是
A 1
B 2
C 3
...
只是 喜欢 什么 我 有 完成 在里面 读取数据 功能 属于 Map管理器 班级。
我 有 建立 一些 代码 那个 能够 是 这个 暗示 对于 这个 解决方案 从 这个 定义 代码 属于 抽象Map 哪一个 是 扩展 通过 树形图<k,v> 和 工具 Map<k,v>in 这个 定义 属于 抽象Map, tostring() 是 实施 喜欢 下图:
public String toString() {
Iterator<Entry<K,V>> i = entrySet().iterator();
if (! i.hasNext())
return "{}";
StringBuilder sb = new StringBuilder();
sb.append('{');
for (;;) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();
sb.append(key == this ? "(this Map)" : key);
sb.append('=');
sb.append(value == this ? "(this Map)" : value);
if (! i.hasNext()) return sb.append('}').toString();
sb.append(',').append(' ');
}
}
如果 我 将 修改 这 代码 到 制作 它 做 什么 我 打算 它 到 是的, 它 将 是 喜欢 这是:
public String toString() {
Iterator<Entry<K,V>> i = entrySet().iterator();
if (! i.hasNext())return "{}";
StringBuilder sb = new StringBuilder();
sb.append('{');
for (;;) {
Entry<K,V> e = i.next();
K key = e.getKey();
V value = e.getValue();sb.append(key == this ? "(this Map)" : key);
sb.append(' '); //whitespace instead of ‘=’
sb.append(value == this ? "(this Map)" : value);
if (! i.hasNext())return sb.toString();// make sb into String without appending anything.
sb.append('\n'); //append newline instead of ‘,’ and ‘ ’
}
}
但是 补充 到 这个, 我 将 喜欢 到 打印 这个 Map的 条目 在里面 这个 提升 秩序 属于 价值 和 这个 按字母顺序排列的 秩序 属于 钥匙, 所以 什么 我 希望 打印 到 做 是 什么 这个 下列的 说明如下:
set = box.entrySet();
list = new ArrayList<>(set);
Collections.sort(list, new ValueComparator<Map.Entry<String, Double>>());
Iterator<Map.Entry<String, Double>> it = list.iterator();
while(it.hasNext()) {
Map.Entry<String, Double> entry = it.next();
double value = entry.getValue().doubleValue();
System.out.println(entry.getKey() + " " + value);
}
怎样 能够 我 做 过度缠绕 在里面 我的 代码 到 实现 这个?一 重要的 约束 是 那个 我 必须 不 修改 这个 代码 里面 公众的 班 问题{ }.
下面是我写的全部代码:
import java.util.*;
import java.util.Map.Entry;
import java.io.*;
class MapManager{
private static BufferedReader br;
private static Set<Map.Entry<String, Double>> set;
private static List<Map.Entry<String, Double>> list;
static class ValueComparator<T> implements Comparator<T>{
public int compare(Object o1, Object o2) {
if(o1 instanceof Map.Entry && o2 instanceof Map.Entry) {
Map.Entry<String, Double> e1 = (Map.Entry<String, Double>) o1;
Map.Entry<String, Double> e2 = (Map.Entry<String, Double>) o2;
double v1 = e1.getValue().doubleValue();
double v2 = e2.getValue().doubleValue();
return (int)(v1 - v2);
}
return -1;
}
}
public static TreeMap<String, Double> readData(String fn){
TreeMap<String, Double> box = new TreeMap<>();
int data = 0, i = 0, j = 0, digits = 0, points = 0;
String buffer = " ";
String name = " ";
String price = " ";
(omitted)
set = box.entrySet();
list = new ArrayList<>(set);
Collections.sort(list, new ValueComparator<Map.Entry<String, Double>>());
Iterator<Map.Entry<String, Double>> it = list.iterator();
while(it.hasNext()) {
Map.Entry<String, Double> entry = it.next();
double value = entry.getValue().doubleValue();
System.out.println(entry.getKey() + " " + value);
}
return box;
}
}
public class Problem {
public static void main(String[] args) {
Map<String, Double> map = MapManager.readData("input.txt");
if(map == null) {
System.out.println("Input file not found.");
return;
}
System.out.println(map);
}
}
2条答案
按热度按时间zlhcx6iw1#
我不知道这个问题和你的课有什么关系
MapManager
.只是为了这个问题
how to override System.out.println(map)
. 您可以覆盖System.out
.输出:
yptwkmov2#
只需创建一个覆盖你的Map
toString
方法。您可以将其分配给接口类型或TreeMap
类型。印刷品
另一个建议。如果必须编写自己的比较器,那么不要这样做。
这是不好的形式。花点时间返回-1、1或0。你可以很容易地使用三元运算符(
?:
).但更好的方法是使用
Map.Entry
班级。