标签: java-8

使用Java 8流分组列表的字符串列表?

我有以下字符串列表

List<String> product_a= Arrays.asList("Product A", "Category A", "Price");
List<String> product_b= Arrays.asList("Product A", "Category A", "Price");
List<String> product_c= Arrays.asList("Product B", "Category B", "Price");
List<String> product_d = Arrays.asList("Product C", "Category C", "Price");
Run Code Online (Sandbox Code Playgroud)

然后,我把它们放在另一个列表中

List<List<String>> products = new ArrayList<>();
products.add(product_a);
products.add(product_b);
products.add(product_c);
products.add(product_d);
Run Code Online (Sandbox Code Playgroud)

使用流,Collectors.groupingBy,Collectors.counting,我如何获得以下输出?可能吗?

Product A - 2
Product B - 1
Product C - 1
Run Code Online (Sandbox Code Playgroud)

提前谢谢你的帮助.

java collections java-8 java-stream

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

java迭代map <string,list <string>,getordefault方法

我有一个<string,List <String type >>的映射,我想要做的是如果列表存在则添加一个字符串来映射值,否则创建一个列表并将其添加到列表并插入map. s1,s2是字符串.

码:

Map<String, List<String>> map = new HashMap<>();

map.put(s1,(map.getOrDefault(s1, new LinkedList<String>())).add(s2));
Run Code Online (Sandbox Code Playgroud)

错误:

error: incompatible types: boolean cannot be converted to List<String>
Run Code Online (Sandbox Code Playgroud)

这有什么问题!!!

java generics list java-8

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

Arrays.asList(word.toCharArray())不返回列表?

我试图将一个字符串转换为一个Stream<Character>并遇到这个奇怪的事情.

它似乎word.toCharArray()返回一个数组,但当我尝试将其转换为列表时Arrays.asList(word.toCharArray()),它似乎失败了(输出是一个完整的字符串).

这里发生了什么?

   @Test
   public void testCharacterStream() {
       characterStreamNew("HELLO");
   }

   private Stream<Character> characterStreamNew(String word) {
      for(Character c: word.toCharArray()) {
          out.println(c);
      }
      Arrays.asList(word.toCharArray()).stream()
              .peek(out::println)
              .forEachOrdered(out::println);
      return null;
   }
Run Code Online (Sandbox Code Playgroud)

这是输出:

H
E
L
L
O
HELLO
HELLO
Run Code Online (Sandbox Code Playgroud)

java arrays string java-8 java-stream

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

为什么ExecutorService不在流中工作?

我通过流传递一组任务,这是一个简化的演示:

    ExecutorService executorService = Executors.newCachedThreadPool((r) -> {
        Thread thread = new Thread();
        thread.setDaemon(true); // even I removed this, it's still not working;
        return thread;
    });
    IntStream.range(0, TASK_COUNT).forEach(i -> {
        executorService.submit(() -> {
            out.println(i);
            return null;
        });
    });
Run Code Online (Sandbox Code Playgroud)

提交完所有任务后,我尝试等待所有这些任务完成后使用:

    executorService.shutdown();
    executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
Run Code Online (Sandbox Code Playgroud)

但输出没有,没有打印出来.

有问题?任何帮助将不胜感激.

一个奇怪的发现是,当使用默认的DefaultThreadFactory时,它正在工作.

ExecutorService executorService = Executors.newCachedThreadPool();
Run Code Online (Sandbox Code Playgroud)

FYI守护程序线程是我已经检查过的原因.为了调试,我故意设置它们.

executorservice java-8

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

仅使用流收集结果(不使用外部循环)

有没有办法只使用lambdas执行以下代码?

// translate someList1 to someList3
// .. get sublist
List<String> someList2 = someList1.stream()
        .map(i -> i.getField())
        .collect(Collectors.toList());
// .. create new (target) list
List<SomeClass> someList3 = new ArrayList<>();
for (String item : someList2) {
    SomeClass someObj = new SomeClass();
    someObj.setField(item);
    someList3.add(someObj);
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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

Java Streams用于在同一列表上循环两次

我是java 8的新手,出于某种原因我对了解流有问题.假设我们有一个对象列表List <MyObject>,其中MyObject有2个字段:Long Id,Date insertTime,我想删除具有相同ID和更早时间的元素.

有2个for循环,它是这样的:

for(MyObject object : myObjects) {
   for(MyObject tmpObject : myObjects) {
      if(object.getId() == tmpObject.getId()) {
         if(object.getInsertDate().after(tmpObject.getInsertDate())) 
           myObjects.remove(tmpObject);
         else 
           myObjects.remove(object);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

使用流时看起来如何?

@Michael我的坏.比我需要另一个列表或数组来存储响应数据.

让我说我有

  1. 1234:25/5/1991
  2. 1235:25/5/1995
  3. 1234:25/5/1999

所以我需要的结果

  1. 1235:25/5/1995
  2. 1234:25/5/1999

谢谢你们.

java loops nested java-8 java-stream

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

无法创建对流的引用,并且无法多次重用相同的流

阅读有关java 8流的文章,并找到了

Java Streams是可以使用的,因此无法创建对流的引用以供将来使用.由于数据是按需的,因此不可能多次重复使用相同的流.

同时在同一篇文章中

//sequential stream
Stream<Integer> sequentialStream = myList.stream();

//parallel stream
Stream<Integer> parallelStream = myList.parallelStream();
Run Code Online (Sandbox Code Playgroud)

"没有办法为将来的使用创建流的引用"是什么意思?不是sequentialStreamparallelStream流的引用

它也意味着"多次重用同一个流是不可能的"?

java-8 java-stream

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

Java Streams:通过现有流放置新元素

我有一个用例,我有一个数据源,比方说:每一秒,一个新的字符串来自该数据源.

我想创建一个管道,如果新的字符串到达​​,它将被推送到该管道进行处理.

我猜Java 8引入的Stream API可以做到这一点,因为它有方便的功能来处理任意集合的数据,但是我想跳过我收集数据的部分到一个单独的集合并派遣到达数据直接到我刚刚创建的Stream.

有没有办法做到这一点?

java stream java-8 java-stream

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

基于Java 8中用户选择的属性动态排序列表

我试图通过使用其成员属性对列表进行排序Comparator.comparing(),并且该属性由用户选择.考虑以下情况:

public class MyClass extends BaseClass
{
    private String attr1;
    private Date attr2;
    private ChildClass attr3;

    //getter and setter
}

public class ChildClass extends BaseClass
{
    private String attr1;
    private Date attr2;
    private int attr3;

    //getter and setter
}
Run Code Online (Sandbox Code Playgroud)

这是我试过的,但有编译错误.

private Map<String, Function<MyClass, ?>> sortingOptions = new HashMap<>();
private String sortBy;  //sorting attribute selected by user

@PostConstruct
public void init()
{
    //my list to be sort
    List<MyClass> list = myService.getList();

    sortingOptions.put("attr1", MyClass::getAttr1);
    sortingOptions.put("attr2", MyClass::getAttr2);
    //......
}

//listener for …
Run Code Online (Sandbox Code Playgroud)

java sorting java-8

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

Java 8字符串比较

我有两个字符串列表.我想检查一个列表中的任何字符串是否在另一个列表中可用.使用下面的方法失败了.

请让我知道一个更好的方法

List<String> mylist = Arrays.asList(stringArray1);
List<String> items = Arrays.asList(stringArray2);

return mylist.stream().anyMatch(t->items.stream().anyMatch(t::contains));
Run Code Online (Sandbox Code Playgroud)

java string arraylist java-8 java-stream

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