【问题标题】:Google Translation API poor performance on List. How to improve?Google Translation API 在 List 上的表现不佳。怎么提高?
【发布时间】:2018-04-26 20:08:59
【问题描述】:

我正在使用 google translate api 来翻译字符串列表,在这种情况下 - 糖果及其各自的颜色。我翻译没有问题,但是,处理时间非常慢 - 大约 20 秒。我希望提高这个速度。任何建议表示赞赏,谢谢。我的代码如下:

这是来自我的 Spring 应用程序的服务层。处理后,我将List<String> 传递给我的 REST 服务中的控制器层。

我正在处理的数据集大约有 100 个元素。

public List<String> getSortedCandies() {
    List<Candy> candyList = new ArrayList<>(this.candyList);

    //sort candies
    candyList = candyList.stream()
            .sorted((o1, o2) -> {
                int nameResult = o1.getName().toUpperCase().compareTo(o2.getName().toUpperCase());
                if (nameResult == 0) {
                    return o1.getColor().toUpperCase().compareTo(o2.getColor().toUpperCase());
                }
                return nameResult;
            }).collect(Collectors.toList());

    Translate translate = TranslateOptions.getDefaultInstance().getService();

    List<String> translatedList = new ArrayList<>();

    //translate from english to spanish
    for (Candy candy : candyList) {
        Detection detection = translate.detect(candy.toString());
        String detectedLanguage = detection.getLanguage();
        Translation translation = translate.translate(
                candy.toString(),
                Translate.TranslateOption.sourceLanguage(detectedLanguage),
                Translate.TranslateOption.targetLanguage("es")
        );
        translatedList.add(translation.getTranslatedText());
    }

    return translatedList;
}

【问题讨论】:

    标签: java performance google-translate


    【解决方案1】:

    您可以修改您的代码以使用parallelStream()Collections.synchronizedList()

    public class StackOverflowSample {
    
        private List<Candy> candyList = new ArrayList<>();
    
        public StackOverflowSample() {
    
        }
    
        public StackOverflowSample(List<Candy> candyList) {
            this.candyList = candyList;
        }
    
        public List<String> getSortedCandies() {
    
            // sort candies
            candyList = candyList.stream().sorted((o1, o2) -> {
                int nameResult = o1.getName().toUpperCase().compareTo(o2.getName().toUpperCase());
                if (nameResult == 0) {
                    return o1.getColor().toUpperCase().compareTo(o2.getColor().toUpperCase());
                }
                return nameResult;
            }).collect(Collectors.toList());
    
            Translate translate = TranslateOptions.getDefaultInstance().getService();
    
            List<String> translatedList = Collections.synchronizedList(new LinkedList<>());
    
            candyList.parallelStream().forEach(c -> {
                Detection detection = translate.detect(c.toString());
                String detectedLanguage = detection.getLanguage();
                Translation translation = translate.translate(c.toString(),
                        Translate.TranslateOption.sourceLanguage(detectedLanguage),
                        Translate.TranslateOption.targetLanguage("es"));
                translatedList.add(translation.getTranslatedText());
            });
    
            return translatedList;
        }
    }
    

    我已经测试了代码,但也许您可以通过在此答案中推荐的过程前后获取当前时间来进行比较:

    https://stackoverflow.com/a/1770475/9015852

    【讨论】:

      猜你喜欢
      • 2018-12-01
      • 2013-02-21
      • 2020-06-25
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多