标签: java-8

Java:对ArrayList进行脏检查?

如何ArrayList在Java中执行脏检查?

我有一个对象

Animal
{
    String animalName;
    String animalType;
    String animalPlace
}
Run Code Online (Sandbox Code Playgroud)

我有两个清单:

List<Animal> animalList1 = new ArrayList<Animal>();
List<Animal> animalList2 = new ArrayList<Animal>();
Run Code Online (Sandbox Code Playgroud)

在第一个列表中,我有值:

[0][lion,Carnivorous,Africa]
[1][tiger,Carnivorous,Zambia]
[2][Goat,Herbivorous,Zimbabwe]
Run Code Online (Sandbox Code Playgroud)

在第二个列表中,我有以下值:

[0][lion,Carnivorous,Africa]
[1][tiger,Carnivorous,Zambia]
[2][Goat,Herbivorous,Norway]
Run Code Online (Sandbox Code Playgroud)

在第二个清单中,animalPlace索引2的元素已从津巴布韦变为挪威.如何比较两个列表值和已更改的值将该对象放在单独的列表中?

List<Animal> animalList3 = new ArrayList<Animal>();

[0] [Goat,Herbivorous,Norway]
Run Code Online (Sandbox Code Playgroud)

通过使用for循环比较列表,我知道传统的方法:

for (int i = 0; i < list1.size(); i++) 
{
  for (int j = i+1; j < list2.size(); j++) 
  {
    // compare list1 and list2 values
  }
}
Run Code Online (Sandbox Code Playgroud)

有更快更好的方式吗?

java arraylist dirtyread java-8

1
推荐指数
1
解决办法
488
查看次数

Java 8并行运行多个方法

我有2种方法,这些方法具有要同时运行的不同返回类型。这是我的代码:

public void method(int id) {
    final CompletableFuture<List<FooA>> fooACF = CompletableFuture.supplyAsync(() -> generateFooA(id));
    final CompletableFuture<List<FooB>> fooBCF = CompletableFuture.supplyAsync(() -> generateFooB(id));
    List<FooA> fooAs = fooACF.get();
    List<FooB> fooBs = fooBCF.get();
    //Do more processesing
}

public List<FooA> generateFooA(int id) {
    //code
}

public List<FooB> generateFooB(int id) {
    //code
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道这两种方法是否都可以与上面的代码并行运行,或者我是否更好地说:

List<FooA> fooAs = generateFooA(id);
List<FooB> fooBs = generateFooB(id);
Run Code Online (Sandbox Code Playgroud)

如何正确使用可完成的期货才能并行运行这两种方法?

java concurrency java.util.concurrent java-8 completable-future

1
推荐指数
1
解决办法
6188
查看次数

使用lambda表达式从ArrayList <E>获取字符串元素

我有一个有效负载返回以下内容ArrayList:

[0] true (boolean)
[1] "someStringValue"
Run Code Online (Sandbox Code Playgroud)

我需要String使用lambda表达式提取包含该值的元素的值.

有任何想法吗?

java lambda java-8

1
推荐指数
1
解决办法
4175
查看次数

如何计算文本文件中的单词,java 8样式

我正在尝试执行一项任务,首先计算目录中的文件数,然后在每个文件中给出一个单词计数.我得到的文件数量还不错,但是我很难转换一些代码,我的教师从一个频率计数到更简单的字数的类中给了我.此外,我似乎无法找到正确的代码来查看每个文件来计算单词(我试图找到"通用"而不是特定的东西,但我试图使用特定的文本文件测试程序) .这是预期的输出:

Count 11 files:
word length: 1 ==> 80
word length: 2 ==> 321
word length: 3 ==> 643
Run Code Online (Sandbox Code Playgroud)

但是,这是输出的内容:

primes.txt
but
are
sometimes
sense
refrigerator
make
haiku
dont
they
funny
word length: 1 ==> {but=1, are=1, sometimes=1, sense=1, refrigerator=1, make=1, haiku=1, dont=1, they=1, funny=1}

.....

Count 11 files:
Run Code Online (Sandbox Code Playgroud)

我正在使用两个类:WordCount和FileCatch8

字数:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.AbstractMap.SimpleEntry;
import java.util.Arrays;
import java.util.Map;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;

    /**
     *
     * @author 
     */
    public class WordCount …
Run Code Online (Sandbox Code Playgroud)

java lambda word-count java-8 java-stream

1
推荐指数
1
解决办法
3032
查看次数

java 8 Map.merge是线程安全的吗?

import java.util.HashMap;
import java.util.Map;

public class MainTest
{
    static Map<String, Integer> map = new HashMap();

    public static void incr()
    {
        map.merge("counter", 1, Integer::sum);
    }

    public static void decr()
    {
        map.merge("counter", -1, Integer::sum);
    }

    public static void main(String[] args) throws Exception
    {
        map.put("counter", 0);
        for (int i = 0; i < 10000; i++)
        {
            Thread t1 = new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    incr();
                }
            });
            t1.join();
            t1.start();

            Thread t2 = new Thread(new Runnable()
            {
                @Override
                public void …
Run Code Online (Sandbox Code Playgroud)

java java-8

1
推荐指数
2
解决办法
435
查看次数

Java如何使用流映射返回布尔值

我试图为结果返回一个布尔值.

 public boolean status(List<String> myArray) {
      boolean statusOk = false;
      myArray.stream().forEach(item -> {
         helpFunction(item).map ( x -> {
              statusOk = x.status(); // x.status() returns a boolean
              if (x.status()) { 
                  return true;
              } 
              return false;
          });
      });
}
Run Code Online (Sandbox Code Playgroud)

lambda表达式中使用的抱怨变量应该是final或者有效的final.如果我指定statusOk,那么我无法在循环内分配.如何使用stream()和map()返回布尔变量?

foreach lambda java-8 java-stream

1
推荐指数
2
解决办法
1万
查看次数

使用java 8在文件中使用两个单词的概率分布

我需要包含两个单词的行数.为此,我编写了以下代码:输入文件包含1000 lines和关于4,000 words,大约需要4个小时.是否有一个库Java可以更快地完成它?我可以使用Appache Lucene或实现此代码Stanford Core NLP以减少运行时间吗?

ArrayList<String> reviews = new ArrayList<String>();
ArrayList<String> terms = new ArrayList<String>();
Map<String,Double> pij = new HashMap<String,Double>();

BufferedReader br = null;
FileReader fr = null;
try 
    {
        fr = new FileReader("src/reviews-preprocessing.txt");
            br = new BufferedReader(fr);
            String line;
            while ((line= br.readLine()) != null) 
            {
            for(String term : line.split(" "))
                {
                    if(!terms.contains(term))
                        terms.add(term);
                }
                reviews.add(line);
            }
        } 
        catch (IOException e) { e.printStackTrace();} 
        finally 
        {
            try 
            {
                if (br …
Run Code Online (Sandbox Code Playgroud)

lucene stanford-nlp java-8 probability-distribution

1
推荐指数
1
解决办法
105
查看次数

为什么Collections.synchronizedList(list)在内部使用instanceof检查?

我正在查看Collections类的源代码.我遇到了方法 Collections.synchronizedList(list)

public static <T> List<T> synchronizedList(List<T> list) {
    return (list instanceof RandomAccess ?
            new SynchronizedRandomAccessList<>(list) :
            new SynchronizedList<>(list));
}
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么我们要检查列表是否属于RandomAccess类型.我知道ArrayList实现了这个接口,而LinkedList没有.

此外,SynchronizedRandomAccessList继承SynchronizedList.那检查有什么意义呢?请解释

java collections java-8

1
推荐指数
1
解决办法
436
查看次数

为什么我们需要来自JOOQ的JOOL?

通过JOOLJOOQ,Streams上提供了许多功能接口和实用程序类.

我的问题是这个库支持1-16个参数功能接口.这有道理吗?因为我一直在练习中将方法中的参数数量减少到3.虽然可接受的数量根据不同的思想领袖而变化.但没有人说16.

请参阅StackOverflow本身的参考链接:

java方法应具有的标准参数数量是多少?

此外,它提供了一个实用程序类Seq,它看起来仅限于顺序处理.

使用JOOL具有良好过去经验的人可以回答为什么我应该使用JOOL看起来像它包含的很多东西是没用的吗?

java java-8 functional-interface jool-library

1
推荐指数
2
解决办法
764
查看次数

等待List <Future>中的每个Future都要完成

我调用一个方法,为a Future中的每个元素返回一次List<Principal>,所以我最终得到一个List<Future<UserRecord>>.

返回的方法Future是库代码,我无法控制代码的运行方式,我只有Future.

我想等待所有的Futures完成(成功或失败),然后再继续.

有没有比这更好的方法:

List<Principal> users = new ArrayList<>();
// Fill users
List<Future<UserRecord>> futures = getAllTheFutures(users);
List<UserRecord> results = new ArrayList<>(futures.size());
boolean[] taskCompleted = new boolean[futures.size()];
for (int j = 0; j < taskCompleted.length; j++) {
    taskCompleted[j] = false;
}
do {
    for (int i = 0; i < futures.size(); i++) {
        if (!taskCompleted[i]) {
            try {
                results.add(i, futures.get(i).get(20, TimeUnit.MILLISECONDS));
                taskCompleted[i] = true;
            } catch (TimeoutException e) { …
Run Code Online (Sandbox Code Playgroud)

java concurrency future java-8

1
推荐指数
1
解决办法
9216
查看次数