java - Google Translation API 在 List 上的性能不佳。如何提高?

标签 java performance google-translate

我正在使用谷歌翻译 API 来翻译字符串列表,在本例中是糖果及其各自的颜色。我的翻译没有问题,但是处理时间非常慢 - 大约 20 秒。我正在寻求提高这个速度。任何建议表示赞赏,谢谢。我的代码如下:

这是来 self 的 Spring 应用程序的服务层。处理完后,我传递了一个List<String>到我的 REST 服务中的 Controller 层。

我正在处理的数据集大约有 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;
}

最佳答案

您可以修改代码以使用 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

关于java - Google Translation API 在 List 上的性能不佳。如何提高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051091/

相关文章:

java - CharSequence 到 int

java - 认证成功后如何使用google-api获取用户信息?

c# - 什么时候推荐在 NHibernate 中使用二级缓存

java - JDK类方法的时间复杂度度量

ruby-on-rails - Ruby on Rails 的 Google 翻译

java - 如何从 HashMap 列表中获取值?

java - ListAdapter 和 Fragment 之间的接口(interface)

javascript - 在 iPad 上使用 touchmove 移动图像(css3 变换)

python - googletrans 停止工作,出现错误 'NoneType' 对象没有属性 'group'

jquery - 谷歌网站翻译器导致 html 损坏