> 峰值到数组?,java,android,arrays"/>

首页 > 解决方案 > 如何转换列表> 峰值到数组?

问题描述

我在我的项目android中使用这个hashmap。

使用此命令:

            List<Map<Integer, Double>> peak = PeakDetect.peak_detection(test1,delta, indices);

其中 test1 是:

double [] test1= {16 ,1, 2, -20, 3, 12, 2, 1, 0, -1, -2 ,-3, -6, -3, -2 ,-1, 0};

我有这个结果:

Result: [{0=0.14692041925343213, 5=0.28567859299278475}, {3=0.4244367667321373}]

在该示例中,我将第一个索引存储在一个新数组中:

0 and 5

0 和 5 表示 test1 的最大值索引,3 表示 test1 的最小值索引。

我怎么能那样做?提前致谢

在此处编辑 peak_detector.java:

package com.google.android.gms.samples.vision.face.rPPG;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

public class PeakDetect {

        public static <U> List<Map<U, Double>> peak_detection(List<Double> values, Double delta, List<U> indices)
        {
            assert(indices != null);
            assert(values.size() != indices.size());

            Map<U, Double> maxima = new HashMap<U, Double>();
            Map<U, Double> minima = new HashMap<U, Double>();
            List<Map<U, Double>> peaks = new ArrayList<Map<U, Double>>();
            peaks.add(maxima);
            peaks.add(minima);

            Double maximum = 0.0;
            Double minimum = 0.0;
            U maximumPos = null;
            U minimumPos = null;

            boolean lookForMax = true;

            Integer pos = 0;
            for (Double value : values) {
                if (value > maximum || maximum == null) {
                    maximum = value;
                    maximumPos = indices.get(pos);
                }

                if (value < minimum || minimum == null) {
                    minimum = value;
                    minimumPos = indices.get(pos);
                }

                if (lookForMax) {
                    if (value < maximum - delta) {
                        maxima.put(maximumPos, value);
                        minimum = value;
                        minimumPos = indices.get(pos);
                        lookForMax = false;
                    }
                } else {
                    if (value > minimum + delta) {
                        minima.put(minimumPos, value);
                        maximum = value;
                        maximumPos = indices.get(pos);
                        lookForMax = true;
                    }
                }

                pos++;
            }

            return peaks;
        }


}

标签: javaandroidarrays

解决方案


像这样的东西?

List<List<Integer>> indexes = peaks
             .stream()
             .map(p -> p.entrySet()
                     .stream()
                     .map(Map.Entry::getKey)
                     .collect(Collectors.toList()))
             .collect(Collectors.toList());

    System.out.println(indexes.get(0)); // maxima list output = [0, 5]
    System.out.println(indexes.get(1)); // minima list output = [3]

推荐阅读