Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 幂形式的素因子_Java - Fatal编程技术网

Java 幂形式的素因子

Java 幂形式的素因子,java,Java,以下程序给出了输出: 3^3*5^1* 但我需要:3^3*5^1 如何避免最后一个“*” 公共类PmFact{ public static void numFreq(List<Integer> l) { Map<Integer, Integer> hm = new HashMap<Integer, Integer>(); for (Integer i : l) { Integer j

以下程序给出了输出: 3^3*5^1* 但我需要:3^3*5^1 如何避免最后一个“*”

公共类PmFact{

      public static void numFreq(List<Integer> l) {

        Map<Integer, Integer> hm = new HashMap<Integer, Integer>(); 

        for (Integer i : l) { 
            Integer j = hm.get(i); 
            hm.put(i, (j == null) ? 1 : j + 1); 
        } 


        for (Map.Entry<Integer, Integer> val : hm.entrySet()) { 
            System.out.print(val.getKey() + "^" + val.getValue() + "*");    
        } 

    } 

public static void main(String[] args) {
    List<Integer> l = new ArrayList<>();
    l.add(3);
    l.add(3);
    l.add(3);
    l.add(5);
    numFreq(l);

}
publicstaticvoidnumfreq(列表l){
Map hm=新的HashMap();
对于(整数i:l){
整数j=hm.get(i);
hm.put(i,(j==null)?1:j+1;
} 
对于(Map.Entry val:hm.entrySet()){
System.out.print(val.getKey()+“^”+val.getValue()+“*”);
} 
} 
公共静态void main(字符串[]args){
列表l=新的ArrayList();
l、 增加(3);
l、 增加(3);
l、 增加(3);
l、 增加(5);
numFreq(l);
}

}

假设您使用的是Java 8+,
stream()
条目设置并将每个值映射为
x^y
,然后使用收集。像

另外,自Java7以来,您可以使用菱形操作符
。变,

Map<Integer, Integer> hm = new HashMap<Integer, Integer>(); 
您也可以替换中间位,我建议使用更有意义的名称(
hm
没有那么糟糕,但是
l
看起来很像
1
)。把这些放在一起可能看起来像

public static void numFreq(List<Integer> list) {
    Map<Integer, Integer> map = new HashMap<>();
    list.stream().forEach(i -> map.put(i, 1 + map.getOrDefault(i, 0)));

    System.out.println(map.entrySet().stream().map(val -> String.format("%s^%s",
             val.getKey(), val.getValue())).collect(Collectors.joining("*")));
}
publicstaticvoidnumfreq(列表){
Map Map=newhashmap();
list.stream().forEach(i->map.put(i,1+map.getOrDefault(i,0));
System.out.println(map.entrySet().stream().map(val->String.format(“%s^%s”),
val.getKey(),val.getValue()).collect(collector.joining(“*”);
}

建议:如果您要为打印部分提供流式回答,您还应该展示如何使用流进行分组/计数逻辑,即使没有要求这样做,以确保完整性。--或者干脆无视我的强迫症@Andreas好建议。添加。或者可能:
list.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting())
Map<Integer, Integer> hm = new HashMap<>(); 
3^3*5^1
public static void numFreq(List<Integer> list) {
    Map<Integer, Integer> map = new HashMap<>();
    list.stream().forEach(i -> map.put(i, 1 + map.getOrDefault(i, 0)));

    System.out.println(map.entrySet().stream().map(val -> String.format("%s^%s",
             val.getKey(), val.getValue())).collect(Collectors.joining("*")));
}