最近,我在代码中尽可能多地使用流,但遇到了一个我还不能解决的问题。
我有一个简单的类叫做“Listing”:
package models;
public class House {
private boolean isPrivate;
private Integer views;
private boolean hasSessionId;
public Listing(boolean isPrivate, Integer views, boolean hasSessionId) {
this.isPrivate = isPrivate;
this.views = views;
this.hasSessionId = hasSessionId;
}
public boolean hasSessionId() {
return hasSessionId;
}
public boolean isPublic() {
return !isPrivate;
}
public boolean isPrivate() {
return isPrivate;
}
public Integer getViews() {
return views;
}
}
我有一个房屋列表,我想在其中生成一个包含两个列表的地图,其中房屋根据特定条件被隔离,我想一个列表包含私人房屋,无论它们是否具有会话id,另一个列表包含具有会话id的公共房屋。
使用传统的循环,我可以实现我想要的功能,但我希望能够将其转换为使用流。
下面的测试类包含两个测试,第一个测试应该为每个循环使用一个传统的,并迭代房屋列表,产生两个列表,一个包含私有房屋,另一个包含公共房屋或带有会话ID的房屋。
第二个测试
应该SeperateWhetherHouse IsPrivate
是我使用流的最初尝试,此时测试在第二个断言上失败,因为分区根据逻辑只分裂房屋对象是否是私有的,因此是没有会话的公共房屋最终被添加到另一个列表,通过segregatedHouses.get(false)访问。
package models;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.junit.Before;
import org.junit.Test;
public class ListingsTest {
private List<House> houses;
@Before
public void setUp() {
House publicListingWithSession = new House(false, 1, true);
House privateListingWithoutSession = new House(true, 1, false);
House publicListingWithNoViewsWithoutSession = new House(false, 0, false);
this.houses = new ArrayList<House>();
this.houses.add(publicListingWithSession);
this.houses.add(privateListingWithoutSession);
this.houses.add(publicListingWithNoViewsWithoutSession);
}
@Test
public void shouldProduceTwoListsWithOneElementEach() {
List<House> privateHouses = new ArrayList<House>();
List<House> publicHousesOrHasSessionId = new ArrayList<House>();
for (House listing : houses) {
if (listing.isPrivate()) {
privateHouses.add(listing);
} else if (listing.getViews() > 0 || listing.hasSessionId()) {
publicHousesOrHasSessionId.add(listing);
}
}
assertEquals(1, privateHouses.size());
assertEquals(1, publicHousesOrHasSessionId.size());
}
@Test
public void shouldSeperateWhetherHouseIsPrivate() {
Map<Boolean, List<House>> segregatedHouses = houses.stream()//
.collect(Collectors.partitioningBy(p -> p.isPrivate()));
assertEquals(1, segregatedHouses.get(true).size());
assertEquals(1, segregatedHouses.get(false).size());
}
}
所以如果谓语
p-
非常感谢您的帮助!
我相信在第二部分中,你只希望房子是私人的或者是公共的,并且被分成两个列表。
试试这个。。。
Map<Boolean, List<House>> segregatedHouses = houses.stream()
.filter(p -> p.isPrivate() || p.hasSessionId())
.collect(Collectors.partitioningBy(p -> p.isPrivate()))
我想创建一个
问题基于https://stackoverflow.com/A/29671501/2517622 有办法吗?
我可以使用db2分区特性来满足上述需求吗?。如何使用last_updated_date列和高于两个some_indicator值对表进行分区?一个分区应该包含按月删除标准的记录,而其他分区应该包含按年删除标准的记录。如果这个表被频繁地读取或更新,那么是否存在与表分区相关的性能问题?以上要求的任何其他最佳实践肯定会有所帮助。
问题内容: 我目前已经实现了一个动态查询构建器,如果我的查询条件拼写正确,该构建器可以完美地工作。由于可能并非总是如此,因此我需要一个足够灵活的解决方案,以适应条件的任何变化,主要是支持不区分大小写。 当前规范的toPredicate方法覆盖代码如下所示: 从服务层调用的我的存储库接口如下所示。 谢谢您的帮助 问题答案: 通常,您可以使用equalsIgnoreCase()方法实现不区分大小写的功
我正在尝试根据买入或卖出方向对股票订单列表进行排序。 我试过这样的方法: 我看到下面的错误消息,我不清楚。 不兼容的类型。必需的int,但已将“comparing”推断给Comparator:不存在类型变量T,U的实例,因此Comparator符合Integer。
我收集了< code > 我想找到“每种类型中的一种”,尽管我想找到产品集合中每个谓词的第一个匹配项。 目前我的代码如下: 但这当然会多次迭代产品集合,这是不需要的,因为在我的例子中,我有100000个产品和64个谓词,并且需要很长时间。 在我的特例中,谓词是互斥的:如果一个谓词返回true,那么对于该特定产品,所有其他谓词都可以跳过。因为我使用了< code>findFirst,所以对于所有其他