我有以下字符串列表
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)
提前谢谢你的帮助.
我有一个<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)
这有什么问题!!!
我试图将一个字符串转换为一个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) 我通过流传递一组任务,这是一个简化的演示:
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守护程序线程是我已经检查过的原因.为了调试,我故意设置它们.
有没有办法只使用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 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我的坏.比我需要另一个列表或数组来存储响应数据.
让我说我有
所以我需要的结果
谢谢你们.
阅读有关java 8流的文章,并找到了
Java Streams是可以使用的,因此无法创建对流的引用以供将来使用.由于数据是按需的,因此不可能多次重复使用相同的流.
同时在同一篇文章中
//sequential stream
Stream<Integer> sequentialStream = myList.stream();
//parallel stream
Stream<Integer> parallelStream = myList.parallelStream();
Run Code Online (Sandbox Code Playgroud)
"没有办法为将来的使用创建流的引用"是什么意思?不是sequentialStream和parallelStream流的引用
它也意味着"多次重用同一个流是不可能的"?
我有一个用例,我有一个数据源,比方说:每一秒,一个新的字符串来自该数据源.
我想创建一个管道,如果新的字符串到达,它将被推送到该管道进行处理.
我猜Java 8引入的Stream API可以做到这一点,因为它有方便的功能来处理任意集合的数据,但是我想跳过我收集数据的部分到一个单独的集合并派遣到达数据直接到我刚刚创建的Stream.
有没有办法做到这一点?
我试图通过使用其成员属性对列表进行排序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) 我有两个字符串列表.我想检查一个列表中的任何字符串是否在另一个列表中可用.使用下面的方法失败了.
请让我知道一个更好的方法
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)